итерация по одной строке в массиве 2D numpy python - PullRequest
0 голосов
/ 16 июня 2020

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

[['dad', 'mom', 'test1.txt']
['brother', 'sister', 'test2.txt']
['uncle', 'aunty', 'test3.txt']
['grandpa', 'grandma', 'test4.txt']]

Я хочу повторить, например. Я открываю файл test1.txt из 1-й первый элемент , и если в разделенном индексе присутствуют строки «папа» и «мама» , то фильтруйте файл, читаю и добавляю возраст. аналогично для файла text2.txt, если присутствуют 'brother' и 'sister' , тогда прочтите и отфильтруйте, и я хочу, чтобы он был во вложенном списке только не в одном.

у меня есть что-то вроде ниже

lst_age=[]
for data in ele_arry:
    file = data[2]
    stg1 = data[1]
    stg2 = data[0]
    files = open(file, 'r').read()
    for line in files:
        formattedline = line.split(' ')
        if formattedline[1] == stg1 and formattedline[2] == stg2:
            lst_age.append(formattedline[3])

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

['1','dad', 'mom', '27']
['2','dad', 'mom', '34']
['3','daughter', 'mom', '42']
['4','dad', 'son', '21']
['5','daughter', 'son', '22']

вывод, который мне нужен, для lst_age переменная

['27', '34'] #for file text1.txt
['28', '43' ] #for file text2.txt
#similarly for all the 4 files 

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

['27', '34','28', '43'] 

Это не дает требуемого вывода в вышеупомянутом. может кто-нибудь помочь мне в этом вопросе?

Спасибо!

1 Ответ

1 голос
/ 16 июня 2020

Это происходит потому, что с files = open(file, 'r').read() вы получите объект файла, а не итеративный список. Вы можете использовать readlines(), который возвращает список со строками файла:

ele_arry =[['dad', 'mom', 'C:\\Users\\Miguel\\Desktop\\test1.txt'],
['brother', 'sister', 'C:\\Users\\Miguel\\Desktop\\test2.txt'],
['uncle', 'aunty', 'C:\\Users\\Miguel\\Desktop\\test3.txt'],
['grandpa', 'grandma', 'C:\\Users\\Miguel\\Desktop\\test4.txt']]


lst_age=[]
for data in ele_arry:
    file = data[2]
    stg2 = data[1]
    stg1 = data[0]
    files = open(file, 'r').readlines()
    lst_agefile=[]
    for line in files:
        formattedline = line.split(' ')
        if formattedline[1] == stg1 and formattedline[2] == stg2:
            lst_agefile.append(formattedline[3].replace('\n',''))
    lst_age.append(lst_agefile)
for i in lst_age:
    print(i)

Вывод:

['27', '34'] 
['28', '43' ]

Однострочный способ:

lst_age=[[line.split(' ')[3].replace('\n','') for line in open(data[2], 'r').readlines() if line.split(' ')[1] == data[0] and line.split(' ')[2] ==  data[1]] for data in ele_arry]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...