лямбда в массиве не находит значения переменных - PullRequest
1 голос
/ 29 февраля 2020

я начал в python некоторое время. go мне снова нужна ваша помощь, у меня есть CSV-файл с кэшированными данными, и я использую for для go через фильтры данных и сохраняю отфильтрованные данные в массив в качестве примера

filters = ['LMS', 'atx', 'arx-dsd']
search_result = []
cached_file = open("teste.csv", "r")

search_result.append(cached_file.readline())
for words in filters:
   print(words)
   if_find = [x for x in cached_file if words in x]
   print(if_find)
   if if_find:
   search_result.extend(if_find)

output:

LMS
[us-east-1a,windows,running,x86_64,IBM,LMS]
ATX
[]
arx-dsd
[]

не находит остальные результаты, только первый в массиве, если вы выполняете его отдельный поиск находит все результаты

я считаю, что моя лямбда неверна, поэтому неверный результат

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

@ stovfl уже предоставил ответ для вашей проблемы: вы не можете читать несколько раз из файлового объекта ,

, чтобы исправить это, вы можете хранить строки вашего файла в переменной:

with open("teste.csv", "r") as f:
    cached_file = f.readlines()
0 голосов
/ 29 февраля 2020

Сначала объявление if_find является не лямбда-функцией, а скорее списком, попробуйте приведенный ниже код, если он соответствует вашим потребностям.

 filters = ['LMS','atx','arx-dsd']
 search_result =[]

 # replace search_result.append(cached_file.readline()) with the following..
 # open csv file and create a list of strings using split
 with open('test.csv','r') as f:
    data = f.readline().strip().split(',')

 #loop through the data which is list of strings
 for i in data:
     print(i)
     if i in filters:    #check if string match in filters
         search_result.append(i)

 print(search_result)

Вывод:

['LMS']
...