Я хочу найти элемент списка в текстовом файле в Python 3 - PullRequest
0 голосов
/ 09 января 2019

Я хочу найти элемент списка в текстовом файле.

Сначала я искал HELP в файле variables.txt, я сохранил его в списке a, что ['setpoint_code_help;', 'position_code_help;', 'torque_code_help;'] Сейчас я пытаюсь найти элемент из этого списка a в labels.h файле, но я не могу найти этот элемент в labels.h файле.

labels.h содержит текст, подобный приведенному ниже:

#define setpoint_code_help                  "Enable or Disable the alarms of Setpoint"
#define position_code_help                  "Enable or Disable the alarms of Position"
#define torque_code_help                    "Enable or Disable the alarms of Torque"

Мне нужно получить определение этой помощи. Пожалуйста, дайте мне знать ваши комментарии по этому вопросу.

d=[]

with open('D:\\HelpString\\variables.txt',"r+") as file:
    fileline= file.readlines()

    for x in fileline:
        if x.find('VARIABLE')>0:
            #a.append(x)
            print(x)
        elif x.find('HELP')>0:
            a=x.split()
            d.append(a[1])
            #print(type(c))
    print(d)
with open('D:\\HelpString\\6060E28C0101VAlabels.h', "r+") as file1:
    fileline1= file1.readlines()
    for x in d:       
        if x in fileline1:
             print(x)

Ответы [ 2 ]

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

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

Вам нужно прочитать какой-нибудь второй файл и отфильтровать только те строки, в которых есть строка из d, верно?

Это так, проблема становится фильтрацией списка строк, в которых есть какая-то строка из другого списка (d)

Можно сделать:

# second file, after building the "d" list    

def filter_lines_by_keywords(lines_to_filter, key_words):
   key_words_s = set(key_words)
   return filter(lambda l: set(l.split()) & key_words_s, lines_to_filter)


with open('D:\\HelpString\\6060E28C0101VAlabels.h', "r+") as file1:
    file1lines = file1.readlines()

filtered_lines = filter_lines_by_keywords(file1lines, d)

Пример выполнения:

d = ['word1', 'word2']
file1lines = ['line1 has some words', 
              'line2 has word1 and other', 
              'line3 has word2 and word1', 
              'line4 had nothing']
res = filter_lines_by_keywords(lines_to_filter = file1lines, 
                              key_words = d)

print(list(res))
>> ['line2 has word1 and other', 'line3 has word2 and word1']
0 голосов
/ 09 января 2019

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

with open('D:\\HelpString\\6060E28C0101VAlabels.h', "r+") as file1:
    fileline1= file1.readlines()
    for x in d: # <--- Loop through the list to check      
        for line in fileline1: # <--- Loop through each line
            if x in line:
                 print(x)
...