我有一个简单的函数可以对字典进行排序:
data = inputfile.readlines()
lineData = sorted(data, key=len, reverse=True)[:3]
打印输出:
^{pr2}$生成预期结果,但写入文件:
outputfile.writelines sorted(data, key=len, reverse=True)[:3]
什么都不会产生。如何将输出写入文本文件(outputfile)? 完整代码如下:
import sys, string
inputfilenames, outputfilename = sys.argv[1:-1], sys.argv[-1]
def do_something_with_input(inputfile):
data = inputfile.readlines()
print sorted(data, key=len, reverse=True)[:3]
print sys.path[0]+"/"+ outputfilename
def write_results(outputfile):
data = inputfile.readlines()
outputfile.writelines(sorted(data, key=len, reverse=True)[:3])
for inputfilename in inputfilenames:
inputfile = open(inputfilename, "r")
do_something_with_input(inputfile)
outputfile = open(outputfilename, "w")
write_results(outputfile)
你写的是:
它实际上应该生成一个语法错误异常,因为缺少括号如果它没有,我猜你一定是在使用一些(据称是)像iPython这样的“智能”IDE,它代表你把括号放进去,是这样吗?在
您正在打印三个最短的行,它们很可能都是空的,应该在输出文件中放入三个空行(当然,不向stdout显示任何内容就是您所说的“generates nothing”?)。可能您没有正确调用
outputfile.close()
,所以当您检查文件时,它们仍处于缓冲状态,尚未写入磁盘。在正如你所看到的,围绕着你那模棱两可的“一事无成”的论断,存在着大量的可能性。你能澄清一下确切地你在使用什么环境,特别是你如何检查你的代码“生成”或没有生成什么?否则,很难帮到你。在
编辑:OP澄清并显示了他的代码,问题现在很清楚:他第一次完全消耗
inputfile
,从不“倒带”,因此文件在第二次readlines
调用时立即结束(其中没有行)。如果您确实需要独立地读取文件两次(而不是像平常一样只读取一次并传递数据),则每次读取文件时都需要调用inputfile.seek(0)
来“倒带文件”,以便再次读取。在writelines
是一个方法,您需要调用它:预计到达时间
^{pr2}$函数
open
提供文件句柄,该文件句柄可以在上迭代一次。在do_something_with_input
函数中执行此操作,在inputfile
迭代之后,迭代器将耗尽。这意味着任何进一步的迭代,例如在write_results
函数中进行的迭代都将产生一个空序列。这就是为什么没有写入输出文件。基本上相当于:您需要做的是存储
sorted(...)
的输出,然后将其写入文件,而不是再次尝试生成它。在相关问题 更多 >
编程相关推荐