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

2024-10-03 02:40:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码来比较一个文件的数量二乘二,我想写我的结果(最后两行)到一个文本文件。但是结果文件是空的。有人知道为什么吗?你知道吗

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()

Tags: inimportforlenifdiffitemlength
2条回答

您正在打印文本,而不是将其写入文件对象。使用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))

在这两种情况下,我在这里以append模式打开文件,以添加新信息而不是替换文件内容。你知道吗

或者,将打开的文件移到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)

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

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

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)

奖金:Python3.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)

相关问题 更多 >