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

将python中的列表拆分为不同的文本文件,python,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:

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

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')
请帮我更正上面的代码

文件1应包括:

text1
text1
text1
文件2:

text2
text2
text2
文件3:

text3
text3
text3
但我上面的代码写道:

text1
text1
text1
text2
text2
text2
text3
text3
text3

我可能会在这里使用
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.

这假设初始列表已排序,并且一遍又一遍地将相同的内容写入文件似乎有点愚蠢,但是如果您确实有一个更多样化的列表,您始终可以根据应用于列表中每个元素的某个键函数的结果进行排序和分组…

您可以尝试使用循环在列表的某个片段上进行迭代。这里,我们使用变量
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
只需对代码进行少量编辑即可完成以下操作:

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
outfiles=['file1','file2','file3']
我的列表=['text1','text1','text1','text2','text2','text2','text3','text3']
四舍五入=0
i=0
而len(文件)*round+i
您想在文件中写入什么?用逗号、空格分隔的单词或列表中的单词?为什么?是因为这些字符串都是相同的字符串吗?还是因为您想将列表分成3个大小相等的块?这个问题的答案极大地改变了解决方案。。。e、 g.如果
my_list
['text1','text1','text2']
,您想要什么?或者
['text1',text1',text2',text3']
或者干脆
['text1']
就这件事来说…@mgilson我已经编辑了这个问题,请看一看
itertools
是一个常用的python工具。@julie:我不明白代码试图做什么。在代码运行后,您可以在每个文件中发布所需的输出吗?@inspectorG4dget in line
对于范围内的i(0,len(我的列表),len(输出文件):
one
为missing@m.wasowski:接得好。谢谢你的错误报告。现在已经修好了,你的代码很有趣。顺便问一下,i+=3的含义是什么?它相当于
i=i+3
。这只是一条捷径。谢谢,但我无法从一开始就了解您的代码是如何工作的。@julie首先循环介绍您要编写的文件的名称。然后打开(创建)要写入的文件。然后循环读单词并写出每个单词。如果你没有得到我的列表[i:i+3]所做的,就用
print
看看发生了什么。第一部分我能理解,但在i=0之后,我无法理解你是如何循环单词并写出每个单词的
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