使用 for 循环选择并写出列表的一些部分

picking and writing out some fractions of list with for-loop

有一个 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

我仍然没有真正的结果,因为到目前为止一切都是错误的。

如果我没理解错的话,这应该可行:

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]去掉多余的逗号;)

更简洁的方法是使用 and 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")

另外重要的一点是你should always use the with statement when reading and writing to files


使用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")