将python中的列表拆分为不同的文本文件

时间:2014-03-21 04:44:29

标签: python

我想为下面列表中的每个三个元素编写三个单独的文本文件:

my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3']
result = [my_list[idx:idx + 3] for idx in range(0, len(my_list), 3)]
outfiles = ['file1', 'file2', 'file3']
for f in outfiles:
    with open ('{}.txt'.format(f),'w') as fo:
        for x in result:
            for y in x:
                fo.write(str(y) + '\n')

请帮我纠正上面的代码。

file1应该包含:

text1
text1
text1

file2的:

text2
text2
text2

file3的:

text3
text3
text3

但我上面的代码写道:

text1
text1
text1
text2
text2
text2
text3
text3
text3

3 个答案:

答案 0 :(得分:0)

我可能会在这里使用itertools.groupby ...

for i, (k, group) in enumerate(groupby(my_list), 1):
    with open('file{}.txt'.format(i), 'w') as fout:
        fout.writelines(item + '\n' for item in group)
        # fout.write('\n'.join(group))  # another alternative which doesn't write a newline at the end of the file.

这假定初始列表已经排序,并且将相同的东西一遍又一遍地写入文件似乎有点傻,但如果你真的有一个更多样化的列表,你总是可以按一些结果排序和分组键函数,它将应用于列表中的每个元素......

答案 1 :(得分:0)

您可以尝试使用循环迭代列表的一部分。在这里,我们使用变量i来指示每次迭代中将使用哪个列表片段:

my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3']
outfiles = ['file1', 'file2', 'file3']

i = 0 # to keep count of which words will be written
for f in outfiles:
    with open ('{}.txt'.format(f), 'w') as fo:
        for word in my_list[i:i + 3]:
            fo.write(word + "\n")
    i += 3

答案 2 :(得分:0)

outfiles = ['file1', 'file2', 'file3']
my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3']
for i in range(0, len(my_list), len(outfiles)):
    with open(my_list, 'a') as outfile:
        for line in outfiles[i:i+len(my_list)]:
            outfile.write(line)
            outfile.write('\n')

通过对代码的最小编辑,可以完成以下操作:

outfiles = ['file1', 'file2', 'file3']
my_list = ['text1', 'text1', 'text1', 'text2', 'text2', 'text2', 'text3', 'text3', 'text3']

round = 0
i = 0
while len(files)*round + i < len(my_list):
    for i,outfilepath in enumerate(outfiles):
        with open(outfilepath) as outfile:
            outfile.write(my_list[len(files)*round + i])
    i += 1