我有一个文本文件,其中包含许多行数据。我需要检查此文本文件的每一行并相应地处理该行中包含的数据(即保存到单独的表格.txt进行分析)
文本文件采用以下格式:
这就是两个示例行的样子:
1 ID:K-95 数据列表
0 ID:D-56 其他数据列表
这样第一行有ID K-95的相关数据,第二行有ID D-56的无关数据。
我想解析文本文件,并根据相关性(0或1)和数据ID对每行中包含的数据进行排序。即按相关性顺序保存每个具有相同ID的行(首先是所有行,然后是0,然后是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()
方法似乎没有返回任何内容:没有错误,没有打印 - 它只是执行并且不返回任何内容。
有什么想法吗?也许是一种更好的方法来解析这些数据以达到我的目标?
答案 0 :(得分:2)
对于str.startswith
,start
和end
被解释为绝对位置(具体来说:end
不会相对于start
进行解释):
str.startswith(prefix[, start[, end]])
如果字符串以前缀开头,则返回
True
,否则返回False
。 前缀也可以是要查找的前缀元组。使用可选的 start ,从该位置开始测试字符串。 使用可选的结束,停止比较该位置的字符串。
所以而不是
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'
答案 1 :(得分:1)
我意识到已经有了答案,但作为替代方案,您还可以检查该行中是否存在idtag:
ls -l x* | awk '{print $9}' | xargs -n1 -P4 generateoutput.sh | tee -a output.csv