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

tyky79it  于 2023-09-29  发布在  Python
关注(0)|答案(4)|浏览(97)

我有这样一个脚本,它可以让单词有多种组合:

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
l0oc07j2

l0oc07j21#

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

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

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变量创建一个新文件。重复该过程,直到处理完所有组合。
hsvhsicv

hsvhsicv2#

如果希望在每个组合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()用于将item元组转换为空格分隔的字符串,否则将item元组写入文件,如下所示:('Mark', 'Mark', 'Mark', 'Mark', 'Mark')而不是Mark Mark Mark Mark Mark

g6ll5ycj

g6ll5ycj3#

使用print(item, file=f)代替f.writelines(item)。函数print默认情况下在任何打印的末尾添加一个换行符。
或者,您可以继续使用writelines,但必须在末尾连接一个换行符。

ar5n3qh5

ar5n3qh54#

首先你应该在for循环之前打开文件
第二步,在项目中添加一个换行符

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

相关问题