Как проверить строку в файле для любого ключа в словаре, а затем использовать этот ключ для получения информации из словаря, в одном для цикла - PullRequest
0 голосов
/ 06 апреля 2020

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

Это то, что у меня есть до сих пор:

info = {'#check here 1':{'action':'read'}, '#check here 2':{'action':'delete'}}

with open(input_file_name, "r") as old_file, open(output_file_name, "w") as new_file:
    lines = old_file.readlines()
    for line in lines:
            x = [k in line.strip() for k in info]
            if any(x):
                print("found key")
                print(x)
                print() 

И это печатает:

found key
[True, False]

found key
[False, True]

Обычно , что я хотел бы сделать, это вложенный для l oop, где для каждой строки в файле, я l oop через словарь, чтобы проверить, присутствует ли какой-либо ключ. Однако мне сказали, что выполнение этого по одному для l oop, проходящего через каждую строку файла, будет более эффективным с точки зрения ресурсов. Есть ли способ для меня, чтобы достичь этого?

Редактировать: Кроме того, вот структура файла:

hello world #check here 1
how are you #check here 1

#check here 2

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

comment = re.compile(r'#.+')

for line in lines:
    print(comment.match(line)

Однако это только соответствие #check here 2, а не #check here 1

1 Ответ

0 голосов
/ 07 апреля 2020

Я нашел способ сделать это с помощью регулярного выражения:

search_pattern = re.compile(r'.*(#.+)')

with open(input_file_name, "r") as old_file, open(output_file_name, "w") as new_file:
    lines = old_file.readlines()

    for line in lines:
        edit_point = search_pattern.match(line)
        if edit_point:
            result = edit_point.group(1)
            if result in edit_info:
                print(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...