我需要阅读一个文本文件,搜索所有行,在该行的特定位置找到一个关键字,如果存在,请从同一行中提取其他数据。
我的例子是单词“ TRED”。如果TRED在索引位置95,我需要从该行的某些列或特定索引中提取数据。
目前我的代码是这个。...但是找不到单词,所以结果都是错误的。
substr = "TRED"
with open(strFileLoc + "test.txt", 'r') as inputfile:
for line in inputfile:
if line.find(substr, 95, 98) != -1:
print(line.rstrip('\n'))
else:
print("There was an error at " + line.rstrip('\n'))
答案 0 :(得分:1)
有两种方法可以解决此问题。问题(基于我的快速测试)是由您进行的子字符串调用引起的:str.find()从您给出的第一个位置到最后一个-1的索引,因此在这种情况下您要查找的子字符串为3字符长(TRE),即使该位置匹配。因此,您可以通过将最终位置增加到99来解决此问题。
但是,find()也返回找到子字符串的位置,如果找不到则返回(-1)。您可以通过搜索而不指定位置并检查返回值来获得良好的结果,从而稳健地处理较短字符串的情况。
substr = "TRED"
with open(strFileLoc + "test.txt", 'r') as inputfile:
for line in inputfile:
loc = line.find(substr)
if loc == 95:
print(line.rstrip('\n'))
else:
print("There was an error at " + line.rstrip('\n'))
答案 1 :(得分:1)
我相信有一个更简单的方法可以进行这种比较。看看下面的代码。
substr = "TRED"
with open(strFileLoc + "test.txt", 'r', 'r') as inputfile:
for line in inputfile:
if line[95:99] == substr:
print(line.rstrip('\n'))
else:
print("There was an error at " + line.rstrip('\n'))
输出:
sdaksdkakslkdlaksjdlkajslkdjlkajklsfjslkdvnksdjjlsjdlfjlskldfjlsnvkjdglsjdfljalsmnljklasjlfaaaaTREDdjsalkjdlka
确保提供正确的索引值。(注意:line [95:99]仅将元素放在95、96、97、98的位置)。
答案 2 :(得分:0)
您提到要从该行的列或索引中提取。 如果您的文件是用空格,逗号,制表符等分隔的,则可以非常轻松地将每一行分成几列。因此,您可以执行以下操作:
substr = "TRED"
token_splitter = ',' # or whatever separator you have
column_number = 2
with open(strFileLoc + "test.txt", 'r', 'r') as inputfile:
for line in inputfile:
columns = line.rstrip().split(token_splitter)
if columns[column_number] == substr: # get the exact column directly
print(line.rstrip('\n'))
else:
print("There was an error at " + line.rstrip('\n'))