выбор и запись некоторых фракций списка с помощью цикла for - PullRequest
0 голосов
/ 07 января 2019

Существует набор данных в виде csv-file, который содержит некоторые табличные данные.
Я хочу выбрать дроби с одинаковым номером.
Например, у меня есть один список

a = [1,1,2,2,3,3,4,4,4,5,5,5,5,6]

и я хочу цикл, который пишет text-files с теми же числами
file_1.txt содержит 1,1
file_2.txt содержит 2,2
file_3.txt содержит 3,3
file_4.txt содержит 4,4,4
file_5.txt содержит 5,5,5,5
file_6.txt содержит 6

У меня все еще нет реального результата, потому что пока все не так.

Ответы [ 2 ]

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

Гораздо более понятным подходом было бы использование itertools.groupby и str.join:

from itertools import groupby

for num, group in groupby(a):
    filename = "file_%d.txt"%num
    with open(filename, 'w') as f:
        f.write(",".join(map(str, group)) + "\n")

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


Использование groupby предполагает, что данные уже отсортированы. Другой подход заключается в использовании collections.Counter:

from collections import Counter

for num, count in Counter(a).items():
    filename = "file_%d.txt"%num
    with open(filename, 'w') as f:
        f.write(",".join([str(num)]*count) + "\n")
0 голосов
/ 07 января 2019

Если я правильно понял, это должно работать:

for x in set(a):
    text_file = open("file_"+str(x)+".txt", "w")
    text_file.write(((str(x)+',')*a.count(x))[:-1])
    text_file.close()

Где это [:-1] в третьей строке убрать лишнюю запятую;)

...