提问人:Amr 提问时间:9/28/2023 最后编辑:Amr 更新时间:9/28/2023 访问量:73
itertools 写入多个文件并在单独的行上
itertools write to multiple files and on separate lines
问:
我有这个脚本,可以制作多种单词组合:
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
答:
-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()
用于将元组转换为以空格分隔的字符串,
否则,元组将按如下方式写入文件:而不是item
item
('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回答了这个问题。
上一个:带悬垂的成对提示类型
评论
list