为什么我的结果没有用Python写入文本文件?
我有下面的代码来比较一系列的文件,我想把结果(最后两行)写到一个文本文件中。但是结果文件是空的。有人知道为什么吗为什么我的结果没有用Python写入文本文件?,python,file-io,Python,File Io,我有下面的代码来比较一系列的文件,我想把结果(最后两行)写到一个文本文件中。但是结果文件是空的。有人知道为什么吗 import difflib from os import listdir from os.path import isfile, join mypath="D:\correctfiles\\112\\" onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ] length = len(onl
import difflib
from os import listdir
from os.path import isfile, join
mypath="D:\correctfiles\\112\\"
onlyfiles = [ f for f in listdir(mypath) if isfile(join(mypath,f)) ]
length = len(onlyfiles)
for i in range(0, length):
for j in range(i + 1, length):
fi = open(mypath + onlyfiles[i])
fj = open(mypath + onlyfiles[j])
ilines= fi.readlines()
jlines= fj.readlines()
d = difflib.Differ()
diff_list = list(d.compare(ilines, jlines))
n_adds, n_subs, n_eqs, n_wiered = 0, 0, 0, 0
for diff_item in diff_list:
if diff_item[0] == '+':
n_adds += 1
elif diff_item[0] == '-':
n_subs +=1
elif diff_item[0] == ' ':
n_eqs += 1
else:
n_wiered += 1
if n_eqs >= (len(ilines))/2 or n_eqs >= (len(jlines))/2:
if n_eqs != 0:
fh= open('D:\\outcome.txt', 'w')
print 'lines files %s: %d %s: %d' % (onlyfiles[i],len(ilines),onlyfiles[j], len(jlines))
print 'adds: %d subs: %d eqs: %d ?:%d ' % (n_adds, n_subs, n_eqs, n_wiered)
fh.close()
您正在打印文本,而不是将其写入文件对象。使用fh.write()
将行写入文件:
with open('D:\\outcome.txt', 'a') as fh:
fh.write('lines files %s: %d %s: %d\n' % (onlyfiles[i],len(ilines),onlyfiles[j], len(jlines)))
fh.write('adds: %d subs: %d eqs: %d ?:%d\n' % (n_adds, n_subs, n_eqs, n_wiered))
或者,使用(更加晦涩且很少使用)打印重定向语法:
with open('D:\\outcome.txt', 'a') as fh:
print >> fh, 'lines files %s: %d %s: %d' % (onlyfiles[i],len(ilines),onlyfiles[j], len(jlines)))
print >> fh, 'adds: %d subs: %d eqs: %d ?:%d' % (n_adds, n_subs, n_eqs, n_wiered))
在这两种情况下,我在这里以追加模式打开文件,以添加新信息,而不是替换文件内容
或者,将打开的文件移到for
循环的外部,只截断一次,然后在循环完成后关闭一次之前,在每次循环迭代中向文件写入行。with
语句负责在with
块完成或退出时为您关闭文件对象。此部分:
print 'lines files %s: %d %s: %d' % (onlyfiles[i],len(ilines),onlyfiles[j], len(jlines))
print 'adds: %d subs: %d eqs: %d ?:%d ' % (n_adds, n_subs, n_eqs, n_wiered)
将输出打印到控制台,而不是文件
您可以将其打印到文件中,将其更改为:
python2.x
print >> fh, 'lines files %s: %d %s: %d' % (onlyfiles[i],len(ilines),onlyfiles[j], len(jlines))
print >> fh, 'adds: %d subs: %d eqs: %d ?:%d ' % (n_adds, n_subs, n_eqs, n_wiered)
奖金:Python 3.x-以防有人需要它:)
可能是因为您正在打印结果,而不是将其写入文件?您能用更多细节解释一下吗?我无法理解@alKidprint输出到控制台,而不是文件。请改用
fh.write()
(;@user2058811:这是因为您每次都以写模式打开文件,在写入新数据之前截断文件。请改用'a'
作为附加模式,或者在for
循环之外打开文件一次,而不是每次都重新打开。
print('lines files %s: %d %s: %d' % (onlyfiles[i],len(ilines),onlyfiles[j], len(jlines)), file=fh)
print('adds: %d subs: %d eqs: %d ?:%d ' % (n_adds, n_subs, n_eqs, n_wiered), file=fh)