символ табуляции не распознается при разборе - PullRequest
0 голосов
/ 29 марта 2019

У меня есть строки, которые имеют 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 Ответ

2 голосов
/ 29 марта 2019

Некоторые из ваших строк не содержат вкладок - следовательно, нет индексов, следовательно, 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 вкладками и сообщать о тех, у которых их нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...