00,0,6098
00,1,6098
00,2,6098
00,3,6098
00,4,6094
00,5,6094
01,0,8749
01,1,8749
01,2,8749
01,3,88609
01,4,88609
01,5,88609
01,6,88611
01,7,88611
01,8,88611
02,0,9006
02,1,9006
02,2,4355
02,3,9013
02,4,9013
02,5,9013
02,6,4341
02,7,4341
02,8,4341
02,9,4341
03,0,6285
03,1,6285
03,2,6285
03,3,6285
03,4,6278
03,5,6278
03,6,6278
03,7,6278
03,8,8960

У меня есть CSV-файл, и немного его показано выше. Что я хочу сделать, если столбец 0 имеет то же значение, он создает массив столбца 2, печатает массив. т.е. на 00, это делает массив-

a = [6098,6098,6098,6098,6094,6094]

Для 01 это делает массив-

A = [8749,8749,88609,88609,88609,88611,88611,88611] Я не знаю, как перебрать этот файл.

-3
abbyad012 28 Июн 2019 в 12:38

3 ответа

Лучший ответ

Это решение предполагает, что первый столбец будет отображаться в отсортированном порядке в файле.

def main():
    import csv
    from itertools import groupby

    with open("csv.csv") as file:
        reader = csv.reader(file)
        rows = [[row[0]] + [int(item) for item in row[1:]] for row in reader]

    groups = {}

    for key, group in groupby(rows, lambda row: row[0]):
        groups[key] = [row[2] for row in group]

    print(groups["00"])
    print(groups["01"])
    print(groups["02"])
    print(groups["03"])

    return 0

if __name__ == "__main__":
    import sys
    sys.exit(main())

Выход:

[6098, 6098, 6098, 6098, 6094, 6094]
[8749, 8749, 8749, 88609, 88609, 88609, 88611, 88611, 88611]
[9006, 9006, 4355, 9013, 9013, 9013, 4341, 4341, 4341, 4341]
[6285, 6285, 6285, 6285, 6278, 6278, 6278, 6278, 8960]
0
user10987432 28 Июн 2019 в 10:24

Идея состоит в том, чтобы использовать словарь, в котором 00, 01 и т. Д. Будут ключами, а значение - списком. Таким образом, вам нужно перебрать данные CSV и отправить эти данные в соответствующие ключи.

import csv

result = {}

with open("you csv file", "r") as csvfile:
     data = csv.reader(csvfile)
     for row in data:
         if result.has_key(row[0]):
            result[row[0]].append(row[2])
         else:
            result[row[0]] = [row[2]]
print (result)
0
kuldeep rawani 28 Июн 2019 в 17:08

Вот

from collections import defaultdict
txt = '''00,0,6098
00,1,6098
00,2,6098
00,3,6098
00,4,6094
00,5,6094
01,0,8749
01,1,8749
01,2,8749
01,3,88609
01,4,88609
01,5,88609
01,6,88611
01,7,88611
01,8,88611
02,0,9006
02,1,9006
02,2,4355
02,3,9013
02,4,9013
02,5,9013
02,6,4341
02,7,4341
02,8,4341
02,9,4341
03,0,6285
03,1,6285
03,2,6285
03,3,6285
03,4,6278
03,5,6278
03,6,6278
03,7,6278
03,8,8960'''

data_holder = defaultdict(list)
lines = txt.split('\n')
for line in lines:
    fields = line.split(',')
    data_holder[fields[0]].append(fields[2])
for k,v in data_holder.items():
    print('{} -> {}'.format(k,v))

Выход

02 -> ['9006', '9006', '4355', '9013', '9013', '9013', '4341', '4341', '4341', '4341']
03 -> ['6285', '6285', '6285', '6285', '6278', '6278', '6278', '6278', '8960']
00 -> ['6098', '6098', '6098', '6098', '6094', '6094']
01 -> ['8749', '8749', '8749', '88609', '88609', '88609', '88611', '88611', '88611']
-1
balderman 28 Июн 2019 в 09:51