解析时未识别制表符

时间:2019-03-29 08:37:36

标签: python-3.x parsing

我有2个制表符为

的字符串
# File contains multiple lines like this
'T1  Original 210 227    Extra Mile'
'T8  Modified 1646 1655   Tickets'
# Eg: "Tx" "indication" "start_index" "end_index" "word"
# 'T1\tOriginal 210 227\tExtra Mile' 

我想要第二个标签后面的单词。所以我试图找到索引'\ t'并将初始字符串替换为空。

def find_index(s, ch):
    return [i for i, ltr in enumerate(s) if ltr == ch]


def extract_words(filename):
    extracted_data = [line.rstrip('\n') for line in open(filename)]
    search_key = '\t'
    for i in range(len(extracted_data)):
        indices = find_index(extracted_data[i], search_key)
        extracted_data[i] = extracted_data[i].replace(extracted_data[i][:indices[-1]], '')
    return extracted_data

,但由于索引输出为[],因此无法识别“ \ t”。 是什么原因引起的?

预期输出

'Extra Mile'
'Tickets'

1 个答案:

答案 0 :(得分:2)

您的某些行不包含制表符-因此没有索引,因此IndexError。 使用:

if len(indices)>1:  # only extract by slicing if indexes found!

进行检查。


为什么这么复杂?使用str.split("\t")

def extract_words(filename):
    with open(filename) as f:
        lines = [x.strip() for x in f.readlines()]

    k = []
    for l in lines:
        try: 
            k.append(l.split("\t")[2]) 
        except IndexError:
            print (f"no 2 tabs in '{l}'")
    return k

t = """T1\tOriginal 210 227\tExtra Mile
T8\tModified 1646 1655\tTickets
Error\ttext"""


fn = "t.txt"
with open(fn,"w") as f: 
    f.write(t)

print(*extract_words(fn), sep="\n")

输出:

no 2 tabs in 'Error text'
Extra Mile
Tickets

这将在具有2个标签的行上工作,并报告不包含这些标签的任何行。