将排序结果写入fi

2024-09-23 22:02:50 发布

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

我有一个简单的函数可以对字典进行排序:

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)

Tags: keytruewritelinesdatalendefsysreverse
2条回答

你写的是:

outputfile.writelines sorted(data, key=len, reverse=True)[:3]

generates nothing.

它实际上应该生成一个语法错误异常,因为缺少括号如果它没有,我猜你一定是在使用一些(据称是)像iPython这样的“智能”IDE,它代表你把括号放进去,是这样吗?在

您正在打印三个最短的行,它们很可能都是空的,应该在输出文件中放入三个空行(当然,不向stdout显示任何内容就是您所说的“generates nothing”?)。可能您没有正确调用outputfile.close(),所以当您检查文件时,它们仍处于缓冲状态,尚未写入磁盘。在

正如你所看到的,围绕着你那模棱两可的“一事无成”的论断,存在着大量的可能性。你能澄清一下确切地你在使用什么环境,特别是你如何检查你的代码“生成”或没有生成什么?否则,很难帮到你。在

编辑:OP澄清并显示了他的代码,问题现在很清楚:他第一次完全消耗inputfile,从不“倒带”,因此文件在第二次readlines调用时立即结束(其中没有行)。如果您确实需要独立地读取文件两次(而不是像平常一样只读取一次并传递数据),则每次读取文件时都需要调用inputfile.seek(0)来“倒带文件”,以便再次读取。在

writelines是一个方法,您需要调用它:

outputfile.writelines(sorted(data, key=len, reverse=True)[:3])

预计到达时间
函数open提供文件句柄,该文件句柄可以在上迭代一次。在do_something_with_input函数中执行此操作,在inputfile迭代之后,迭代器将耗尽。这意味着任何进一步的迭代,例如在write_results函数中进行的迭代都将产生一个空序列。这就是为什么没有写入输出文件。基本上相当于:

^{pr2}$

您需要做的是存储sorted(...)的输出,然后将其写入文件,而不是再次尝试生成它。在

相关问题 更多 >