Python 对字符串中的特定位置使用.startswith()时出现问题

Python 对字符串中的特定位置使用.startswith()时出现问题,python,data-science,Python,Data Science,我有一个文本文件,里面有很多行数据。我需要检查此文本文件的每一行,并相应地处理该行中包含的数据(即保存到单独的tableted.txt中进行分析) 文本文件的格式如下: 数字1或0(表示数据的相关性) 每行的ID(参考数据内容) 数据本身(包含在行的其余部分) 这是两条示例线的样子: 1 ID:K-95数据列表 0 ID:D-56其他数据列表 第一行与ID K-95相关,第二行与ID D-56无关 我想解析文本文件,并根据相关性(0或1)和数据ID对每行中包含的数据进行排序。也就是说,按照相

我有一个文本文件,里面有很多行数据。我需要检查此文本文件的每一行,并相应地处理该行中包含的数据(即保存到单独的tableted.txt中进行分析)

文本文件的格式如下:

  • 数字1或0(表示数据的相关性)
  • 每行的ID(参考数据内容)
  • 数据本身(包含在行的其余部分)
这是两条示例线的样子:

1 ID:K-95数据列表

0 ID:D-56其他数据列表

第一行与ID K-95相关,第二行与ID D-56无关

我想解析文本文件,并根据相关性(0或1)和数据ID对每行中包含的数据进行排序。也就是说,按照相关性的顺序(首先是所有具有1的行,然后是具有0的行)保存具有相同ID的每行。行可以具有相同的ID,但数据不同。线也总是固定长度的

为此,我想到了:

idtag = input('Enter ID:')

with open("example.txt", 'r') as f:                                                                                         
    for line in f.readlines():                                                                                              
        if line.startswith('1') and line.startswith(idtag, 5, 3):                                                                                            
            print line
但在这方面有困难。特别是在and运算符之后的第二个条件周围。我可以根据是0还是1打印/选择行,没有问题。但是,使用具有定义位置的
.startswith()
方法似乎不会返回任何内容:没有错误,没有打印-它只执行并返回任何内容


有什么想法吗?可能是更好的解析此数据的方法,以满足我的目标?

开始
结束
解释为绝对位置(特别是:
结束
不是相对于
开始
进行解释的):

str.startswith(前缀[,开始[,结束]])

如果字符串以前缀开头,则返回
True
,否则返回
False
。前缀也可以是要查找的前缀元组。使用可选开始,测试从该位置开始的字符串使用可选结尾,停止在该位置比较字符串。

所以不是

line.startswith(idtag, 5, 3)
你需要使用

line.startswith(idtag, 5, 5+4)
这两个参数相当于切片符号:

line[5: 5+4].startswith(idtag)
例如:

>>> a = 'abcdefg'
>>> a.startswith('c', 2, 1)
False
>>> a[2:1]
''

>>> a.startswith('c', 2)
True
>>> a[2:]
'cdefg'

>>> a.startswith('c', 2, 3)
True
>>> a[2:3]
'c'

开始
结束
被解释为绝对位置(特别是:
结束
不被解释为相对于
开始
):

str.startswith(前缀[,开始[,结束]])

如果字符串以前缀开头,则返回
True
,否则返回
False
。前缀也可以是要查找的前缀元组。使用可选开始,测试从该位置开始的字符串使用可选结尾,停止在该位置比较字符串。

所以不是

line.startswith(idtag, 5, 3)
你需要使用

line.startswith(idtag, 5, 5+4)
这两个参数相当于切片符号:

line[5: 5+4].startswith(idtag)
例如:

>>> a = 'abcdefg'
>>> a.startswith('c', 2, 1)
False
>>> a[2:1]
''

>>> a.startswith('c', 2)
True
>>> a[2:]
'cdefg'

>>> a.startswith('c', 2, 3)
True
>>> a[2:3]
'c'

我意识到已经有了答案,但作为替代方案,您也可以检查线路中是否存在idtag:

idtag = input('Enter ID:')

with open("example.txt", 'r') as f:                                                                                         
    for line in f.readlines():                                                                                              
        if line.startswith('1') and idtag in line:                                                                                            
            print line

我意识到已经有了答案,但作为替代方案,您也可以检查线路中是否存在idtag:

idtag = input('Enter ID:')

with open("example.txt", 'r') as f:                                                                                         
    for line in f.readlines():                                                                                              
        if line.startswith('1') and idtag in line:                                                                                            
            print line

如果给出的示例ID具有代表性,您还需要增加end参数(第[5:5+3]行将给出与“K-95”不匹配的“K-9”)。好的,那么第3行:
如果line.startswith('1')和line.startswith(idtag,5,3):
是一个打字错误,我应该放4,因为我认为它与子字符串的长度有关,而不是相对位置。然而,我仍然有同样的问题
如果line.startswith('1')和line.startswith(idtag,5,5+4):print line
此代码块中的print语句不执行,电话线没有接通returned@tyrfingnir我确实用了一种稍微不同的方法对它进行了测试,它成功了:-我不知道你为
idtag
输入了什么,也不知道你的文件是什么样子的-所以可能没有匹配?如果给出的示例ID具有代表性,你还需要增加end参数(第[5:5+3]行会给你“K-9”行中的3:
如果line.startswith('1')和line.startswith(idtag,5,3):
是一个拼写错误,我应该放4,因为我认为它与子字符串的长度有关,而不是相对位置。然而,我仍然有同样的问题
如果line.startswith('1')和line.startswith(idtag,5,5+4):print line
此代码块中的print语句不执行,电话线没有接通returned@tyrfingnir我确实用了一种稍微不同的方法测试了它,它成功了:-我不知道你为
idtag
输入了什么,也不知道你的文件是什么样子-所以可能根本没有匹配项?数据列表是否用分隔符分隔,比如逗号?@SaikatKumarDey是,它用空格分隔,格式如下:a:100F b:150A c:41列表中的项目数是否固定?@SaikatKumarDey是的,每个项目都有一个固定的数字。如前所述,“行的长度也总是固定的。”数据列表是否用分隔符分隔,比如逗号?@SaikatKumarDey是的,它用空格分隔,格式如下:a:100F b:150A c:41列表中的项数是否固定?@SaikatKumarDey是的,每个条目都有一个固定的数字。如前所述,“线条也总是固定长度。”