为什么我的结果没有写入Python的文本文件?

时间:2013-12-03 13:28:30

标签: 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(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()

2 个答案:

答案 0 :(得分:3)

您正在打印您的文字,而不是将其写入文件对象。使用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语句负责关闭文件对象。

答案 1 :(得分:2)

这部分:

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)

将输出打印到控制台,而不是文件。

您可以将其打印到文件中,将其更改为:

Python 2.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 - 如果有人需要它:)

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)