Why循环在写入文件时执行两次



我有两个文件abc.txtcde.txt

abc.txt的内容是";这是abc文件";cde.txt的内容是";这是cde文件";

我正试图写入一个文件。但是内容写了两次以下是代码

in_files = ['abc.txt','cde.txt']
out_files = ['abc_output.txt','cde_output.txt']
read_dict = {}
for file in in_files:
with open(file,'r') as read_file:
lines = read_file.readlines()
read_dict[file] = lines
read_dict
for k,v in read_dict.items():
for out in out_files: 
with open(out,'w+') as write_file:
for i in v:
print(i)

输出

This is abc file
This is abc file
This is cde file
This is cde file

预期

This is abc file
This is cde file

如果将print(i)更改为print('writing to', write_file, i),您将第一次看到">这是abc文件";打印的是写入abc_output.txt的时间,第二次打印的是输出到cde_output.ttxt

您期望的输出在每个文件中只显示一次。这就是你想要的吗这是abc文件";只输出到abc_output.txt和">这是cde文件";只输出到cde_output.txt?如果是这样的话,你会想做这样的事情:

in_files = ['abc.txt','cde.txt']
out_files = ['abc_output.txt','cde_output.txt']
read_dict = {}
for in_f, out_f in zip(in_files, out_files):
with open(in_f,'r') as read_file:
lines = read_file.readlines()
with open(out_f,'w+') as write_file:
#write_file.writelines(lines)
print(lines)

之所以会发生这种情况,只是因为您运行了两次外循环(每个输出文件一次(,总共会导致4次运行,而不是两次。

read_dict = {'file1':'abc file', 'file2':'cde file'}
out_files = ['out1', 'out2']
for k,v in read_dict.items():
for out in out_files:
print(k, v)

运行上面的代码,这将准确地生成您在输出文件中得到的内容。

您添加的最后一个循环是不必要的,之前的一个循环导致它运行两次,因为它嵌套在for k,v in read_dict.items()循环下。。。

in_files = ['abc.txt','cde.txt']
out_files = ['abc_output.txt','cde_output.txt']
read_dict = {}
for file in in_files:
with open(file,'r') as read_file:
lines = read_file.readlines()
read_dict[file] = lines
read_dict
for k,v in read_dict.items():
for out in out_files: 
with open(out,'w+') as write_file:
print(v)
break;

最新更新