为什么我的结果没有用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)