Функция возвращает желаемое значение только один раз - PullRequest
0 голосов
/ 02 октября 2018

Я создал скрипт, который будет искать целевой файл по ключевому слову.Если это ключевое слово находится в определенной строке текста, оно возьмет весь текст и вернет остаток строки, не содержащий ключевое слово.Например, если есть строка текста, которая говорит:

Title: Useless Data

, тогда скрипт будет выполнять только ту часть, которая говорит «бесполезные данные», и добавлять ее в список.Это будет сделано для каждого места в файле, где появляется слово «title».

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

LINE 1:
Title: Useless Data
Icon: Fairly upset programmer
Index: 12
filler data:
LINE 2:
Title: Line 2
Icon: Pancho
Index: 69
filler data:

Вывод должен быть:

list1 = ['Useless Data', 'Line 2']
list2 = ['Fairly upset programmer', 'Pancho']

Затем я хочу сжать их в диктовку, которая выглядит следующим образом:

final_dict = {'Useless Data' : 'Line 2', 'Fairly upset programmer': 'Pancho'}

title_list = {}
target_file = open('Meta.txt', 'r')

# Searches for word in a line and removes all the useless data
def splitter(files, word):
    output = []
    for line in files:
        if word in line:
            output.append(line.split(':')[1].replace('\n', '').strip())
        else:
            continue
    print(output)
    return output

split1 = splitter(target_file, 'icon')
split2 = splitter(target_file, 'title')
final = zip(split1, split2)

1 Ответ

0 голосов
/ 02 октября 2018

В вашем коде было две проблемы: во-первых, вы использовали строчные буквы icon и title, тогда как ваш файл содержит прописные буквы Icon и Title.Строки чувствительны к регистру в Python, поэтому они не идентичны.Во-вторых, после прочтения содержимого вашего файла при первом вызове функции второй раз с использованием target_file не работал по причинам, указанным @roganjosh в комментариях ниже.Таким образом, у вас есть две из многих других опций: 1) Либо читать файл каждый раз в функции, либо 2) использовать files.seek(0).Оба решения приведены ниже.

title_list = {}

# Searches for word in a line and removes all the useless data
def splitter(word):
    target_file = open('Meta.txt', 'r')
    output = []
    for line in target_file:
        if word in line:
            output.append(line.split(':')[1].replace('\n', '').strip())
        else:
            continue

    target_file.close()
    return output

split1 = splitter('Icon')
split2 = splitter('Title')

final = dict([iter(split2), iter(split1)])
print (final)


{'Useless Data': 'Line 2', 'Fairly upset programmer': 'Pancho'}

Альтернативное решение, предложенное @roganjosh с использованием files.seek(0)

title_list = {}

target_file = 'Meta.txt'

# Searches for word in a line and removes all the useless data
def splitter(files, word):
    files.seek(0)
    output = []
    for line in target_file:
        if word in line:
            output.append(line.split(':')[1].replace('\n', '').strip())
        else:
            continue
    return output

with open(target_file) as infile:
    split1 = splitter(infile, 'Icon')
    split2 = splitter(infile, 'Title')
    final = dict([iter(split2), iter(split1)])
print (final)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...