скрипт рассматривает только первый элемент списка — python

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
Загрузка...

Вопрос:


Здравствуйте, у меня имеется код для парсинга двух файлов в определённой директории, вот код:

dir = 'C:pythoninput'
for txt in glob.glob(os.path.join(dir,'*.txt')):
    with open(txt, newline='') as input:
        ats = ['1','2']
        for a in ats:          
                reader = csv.reader(input, delimiter = ' ')
                angles = []
                for row in reader:
                    if row[2] == a:
                        angles.append(row[4])
                print(a,angles)

однако, на выходе я получаю вот это:

1 ['114.32', '102.62', '114.12', '100.02', '118.02', '104.93']
2 []
1 ['94.02', '95.42', '174.32', '95.62', '164.11', '86.21', '90.01', '85.71', '101.81', '78.71']
2 []

Может ли кто-нибудь помочь с этим, почему второй элемент списка скрипт не рассматривает?
пример входного файла:

fNumber m1 m2 m3 Angle
a1 3 1 6 84.92
a2 3 1 12 93.12
a3 3 1 13 144.52
a4 3 1 14 162.22
a5 3 2 15 89.22
a6 3 2 16 81.32
a7 3 2 20 74.92
a8 6 3 12 79.52
a9 6 3 13 129.92

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

reader = csv.reader(input, delimiter = ' ') 
angles = [] 
n = 0 
out = [] 
for row in reader: 
    ats = ['1','2'] 
    for a in ats: 
        if row[2] == a: 
            n += 1 
            angles.append(row[4]) 
print(a,angles)

Автор вопроса: pinacol

jfs

Файл это итератор в Питоне. Потребив значения один раз (когда a=='1') вы не получите больше значений (пусто для a=='2'):

>>> it = iter(range(5))
>>> list(it)
[0, 1, 2, 3, 4]
>>> list(it)
[]

В вашем случае, вы можете перенести открытие файла внутрь ats цикла.

Есть алгоритмы, которые не требуют читать файл несколько раз. Можно за один проход сгруппировать значения пятого поля по интересующим значениям третьего и вывести в формате, используемом в вопросе с помощью collections.defaultdict (набросок):

from collections import defaultdict

g = defaultdict(list)
for row in csv.reader(file, **dialect):
    if row[2] in ats:   # if interesting 
        g[row[2]].append(row[4])  # add to the group

for a in ats:  # display groups
    print(a, g[a])

Если строки отсортированы по значению третьего поля (как пример в вопросе), можно itertools.groupby() использовать для группировки значений:

from itertools import groupby

for a, group in groupby(reader, key=lambda row: row[2]):
    if a in ats:  # interesting 
        print(a, [row[4] for row in group])  # display group

Попробуйте воспользоваться модулем Pandas:

import pandas as pd

def parse_file(filename):
    return (pd.read_csv(filename, delim_whitespace=True)
              .groupby('m2')['Angle']
              .agg(lambda x: x.values.tolist())
              .to_dict())

Проверка:

In [169]: parse_file(filename)
Out[169]:
{1: [84.92, 93.12, 144.52, 162.22],
 2: [89.22, 81.32, 74.92],
 3: [79.52, 129.92]}

Источник

Вам также может быть интересно:

Drag and Drop UWP — c# xaml mvvm
Вопрос: Нужно иметь возможность добавлять изображения в приложение путем перетаскивания из файловой системы У Grid включил AllowDrop. Но как добавить перетаскиваемые изображения в коллекцию? Т.к. те ...
Растягивание Высоты , Резина — html css html5
Вопрос: Здравствуйте! Реализовал резиновый дизайн. Растягивается ширина, но длина по % не растягивается. Возможно ли это реализовать? Или так и задумано, растягивание только на ширину ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
Jquery position().left Как быть на мобильниках? — javascript jquery css
Вопрос: На мобильных устройствах, если зумишь экран, position всегда разный. $('g').position().left Как сделать так, чтобы он не менял свои значения? Автор вопроса: ...
requestAnimation и очередность отрисовки — javascript canvas
Вопрос: Здравствуйте! Реализовал 2D игру и в Edge работает все плавно и круто, но в Firefox'e подвисает, сказали, что нужно сделать, чтобы раз-два момент и все ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Контекстное/всплывающее меню в Android — java android popup
Вопрос: Есть ли техническая возможность сделать приложение, добавляющее свое контекстное или всплывающее меню в любом месте системы? Хочу, чтобы при выделении любого текста появлялась дополнительная кнопка ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
Завершить службы циклом — c# windows-service
Вопрос: Можно ли остановить службы циклом? У меня есть список служб, занёс их в List List<string> name = new List<string> { "AdobeARMservice", "RemoteRegistry", "TermService", "Messenger", "SSDPSRV", ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
RecyclerView — разная разметка — android recyclerview
Вопрос: Смотрел, я смотрел в сторону RecyclerView и наконец решил кинуть ListView и на тебе! В "плохом прошлом" мой ListView использовался для двух разметок. Сейчас я ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
Как правильно передать массив аргументом для пользовательской функции — php
Вопрос: Если не брать в функцию все это, тогда результат работает. А если вот так в функции все выполнять, тогда PHP ругается: «Invalid ...
ViewPager внутри ViewPager — такие матрешки работают? — android viewpager
Вопрос: Доброго времени суток. Назрела новая задача. Есть каталог мастеров. При выборе конкретного мастера открывается его страница (активити с ViewPager), и теперь мастеров можно перелистывать свайпом. ...
Почему id всегда 1 Yii2 — yii авторизация
Вопрос: Использую все как по документации. Для получения информации о пользователе использую $identity = $model->findOne(]); И каким бы не был email, id пользователя всегда ...

Оставьте ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *