Как открыть файл в python, прочитать комментарии («#»), найти слово после комментариев и выбрать слово после него? - PullRequest
0 голосов
/ 30 января 2019

У меня есть функция, которая перебирает файл, который выглядит следующим образом:

"#" XDI/1.0 XDAC/1.4 Athena/0.9.25

"#" Column.4:                      pre_edge

Content

То есть, после "#" есть комментарий.Моя функция предназначена для чтения каждой строки и, если она начинается с определенного слова, выберите то, что следует после ":"

Например, если у меня были эти две строки.Я хотел бы прочитать их, и если строка начинается с «#» и содержит слово «Column.4», следует сохранить слово «pre_edge».

Ниже приведен пример моего текущего подхода:

with open(file, "r") as f:
        for line in f:
            if line.startswith ('#'):
                word = line.split(" Column.4:")[1]
            else:
                print("n")

Я думаю, что моя проблема, в частности, после нахождения строки, которая начинается с "#", как я могу проанализировать / найти по ней?и сохраните его содержимое, если оно содержит желаемое слово.

Ответы [ 3 ]

0 голосов
/ 31 января 2019

В случае, если # комментарий содержит стр. Column.4:, как указано выше, вы можете проанализировать его следующим образом.

with open(filepath) as f:
    for line in f:
        if line.startswith('#'):
            # Here you proceed comment lines
            if 'Column.4' in line:
                first, remainder = line.split('Column.4: ')
                # Remainder contains everything after '# Column.4: '
                # So if you want to get first word ->
                word = remainder.split()[0]
        else:
            # Here you can proceed lines that are not comments
            pass

Примечание

Также рекомендуется использоватьfor line in f: вместо f.readlines() (как упоминалось в других ответах), потому что таким образом вы загружаете не все строки в память, а выполняете их одну за другой.

0 голосов
/ 31 января 2019
with open('stuff.txt', 'r+') as f:
    data = f.readlines()

for line in data:
    words = line.split()
    if words and ('#' in words[0]) and ("Column.4:" in words):
        print(words[-1])

# pre_edge
0 голосов
/ 30 января 2019

Вы должны начать с чтения файла в список, а затем поработать с ним:

file = 'test.txt' #<- call file whatever you want
with open(file, "r") as f:
    txt = f.readlines()
    for line in txt:
        if line.startswith ('"#"'):
            word = line.split(" Column.4: ")
            try:
                print(word[1])
            except IndexError:
                print(word)
        else:
            print("n")

Вывод:

>>> ['"#" XDI/1.0 XDAC/1.4 Athena/0.9.25\n']
>>> pre_edge

Использовать попытку и исключить catch, поскольку первая строкатакже начинается с "#" , и мы не можем разделить это с вашей текущей логикой.

Также, как примечание, в вопросе у вас есть файл со строками, начинающимися как "#" с кавычками, чтобы функция startswith() была изменена как таковая.

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