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



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

文本文件采用以下格式:

  • 数字 1 或 0(表示数据的相关性(
  • 每行的 ID(指数据是什么(
  • 数据本身(包含在行的其余部分(

因此,这是两个示例行的外观:

1 ID:K-95数据列表

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

这样,第一行具有与ID K-95相关的数据,第二行具有与ID D-56无关的数据。

我想解析文本文件,并根据相关性(0 或 1(和数据 ID 对每行中包含的数据进行排序,即按相关性顺序使用相同的 ID 保存每一行(首先是所有行 1,然后是 0(。行可以具有相同的 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

但是,对此有麻烦。具体到和运算符之后的第二个条件。我可以根据是否有 0 或 1 打印/选择行,没问题。但是,使用具有定义位置的.startswith()方法似乎什么都不返回:没有错误,没有打印 - 它只是执行并且不返回任何内容。

有什么想法吗?也许解析这些数据以满足我的目标的更好方法?

startend被解释为绝对位置(特别是:end不是相对于start解释str.startswith

(:

str.startswith(prefix[, start[, end]])

如果字符串以前缀开头,则返回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

最新更新