gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:33:51 25 4
gpt4 key购买 nike

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

文本文件采用以下格式:

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

这就是两个示例行的样子:

1 ID:K-95 数据列表

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

第一行包含与 ID K-95 相关的数据,第二行包含与 ID D-56 无关的数据。

我想解析文本文件,并根据相关性(0 或 1)和数据 ID 对每行中包含的数据进行排序。 IE。按相关性顺序保存具有相同 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

但是遇到了麻烦。特别是围绕 and 运算符之后的第二个条件。我可以根据是否有 0 或 1 来打印/选择行,没问题。然而,使用具有定义位置的 .startswith() 方法似乎不会返回任何内容:没有错误,没有打印 - 它只是执行并且不返回任何内容。

有什么想法吗?也许有更好的方法来解析这些数据来实现我的目标?

最佳答案

startend 被解释为绝对位置(具体来说:end 不被解释为相对于 start ) 为 str.startswith :

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

Return True if string starts with the prefix, otherwise return False. prefix can also be a tuple of prefixes to look for. With optional start, test string beginning at that position. With optional end, stop comparing string at that position.

所以而不是

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'

关于python - 对字符串中的特定位置使用 .startswith() 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45032233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com