itertools 写入多个文件并在单独的行上

itertools write to multiple files and on separate lines

提问人:Amr 提问时间:9/28/2023 最后编辑:Amr 更新时间:9/28/2023 访问量:73

问:

我有这个脚本,可以制作多种单词组合:

import itertools
from itertools import combinations_with_replacement

list = ['Mark', 'Jones', 'Albert', 'Mary', 'Bob']

combs = itertools.combinations_with_replacement(list, 5)

for item in combs:    
    print(item)
    with open('output{0}.txt', 'a') as f:
        f.writelines(item)

问题是输出文件的单词之间没有空格,所有单词都在同一行上,我尝试了多种解决方案,但没有奏效。此外,我尝试将每 10 次迭代写入一个单独的文件中,但也找不到解决方案

我将不胜感激任何建议

谢谢

这是输出文件的样子

MarkMarkMarkMarkMarkMarkMarkMarkMarkJones

这是它应该的样子

Mark Mark Mark Mark Mark
Mark Mark Mark Mark Jones
python-itertools

评论

0赞 sjking 9/28/2023
避免使用变量名称,因为它会覆盖 Python 中的内置列表构造函数。list

答:

-1赞 motyzk 9/28/2023 #1

使用代替 . 默认情况下,该函数会在任何打印的末尾添加换行符。print(item, file=f)f.writelines(item)print

或者,您可以继续使用 ,但必须在末尾连接一个换行符。writelines

0赞 JRiggles 9/28/2023 #2

如果你想在每个组合之间有一个换行符,你可以像这样附加一个item

import itertools
from itertools import combinations_with_replacement

list = ['Mark', 'Jones', 'Albert', 'Mary', 'Bob']

combs = itertools.combinations_with_replacement(list, 5)

with open('output{0}.txt', 'a') as f:  # better to open the file only once
    for item in combs:  # *then* iterate over the combinations
        f.write(f'{" ".join(item)}\n')  # insert the 'item' followed by a newline

join()用于将元组转换为以空格分隔的字符串, 否则,元组将按如下方式写入文件:而不是itemitem('Mark', 'Mark', 'Mark', 'Mark', 'Mark')Mark Mark Mark Mark Mark

-1赞 Monkeysoop 9/28/2023 #3

首先,您应该在 for 循环之前打开文件

其次,向项目添加换行符

with open('output{0}.txt', 'a') as f:
    for item in combs:    
        print(item)
        f.writelines(str(item) + '\n')

1赞 Sauron 9/28/2023 #4
  • 使用该方法将每个组合中的单词连接起来,中间有一个空格。join
  • 在每行末尾添加一个换行符,以确保每个组合都写在输出文件中的单独行上。\n
import itertools

my_list = ['Mark', 'Jones', 'Albert', 'Mary', 'Bob']

combs = itertools.combinations_with_replacement(my_list, 5)

with open('output.txt', 'a') as f:
    for item in combs:
        line = ' '.join(item) + '\n'
        print(line)
        f.write(line)

您可以使用变量来跟踪迭代次数,并每 10 次迭代创建一个新文件。counter

import itertools

my_list = ['Mark', 'Jones', 'Albert', 'Mary', 'Bob']

combs = itertools.combinations_with_replacement(my_list, 5)

counter = 0
file_counter = 1

for item in combs:
    counter += 1
    line = ' '.join(item) + '\n'
    print(line)
    
    with open(f'output{file_counter}.txt', 'a') as f:
        f.write(line)
    
    if counter == 10:
        counter = 0
        file_counter += 1
  • 计数器变量,用于跟踪迭代次数 & 将每个组合写入当前文件后,计数器将递增。
  • 当计数器达到 10 时,通过递增变量来创建一个新文件。重复此过程,直到处理完所有组合。file_counter

评论

0赞 Amr 9/28/2023
这非常有效,但是如何将每 10 次迭代输出到一个单独的 txt 文件中
0赞 Sauron 9/28/2023
@Amr使用计数器,将以位为单位进行编辑。
0赞 Sauron 9/28/2023
@Amr回答了这个问题。