搜索行,提取特定数据

时间:2018-11-05 18:25:30

标签: python text

我需要阅读一个文本文件,搜索所有行,在该行的特定位置找到一个关键字,如果存在,请从同一行中提取其他数据。

我的例子是单词“ 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'))

3 个答案:

答案 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'))