【问题标题】:Python - Only last line is saved to filePython - 只有最后一行保存到文件
【发布时间】:2014-09-26 17:13:42
【问题描述】:

我正在尝试将脚本的结果输出到文本文件中。脚本工作正常,唯一的问题是当结果保存到文本文件(output.txt)时,只保存最后一行,而不是全部?我不确定我在这里做错了什么。任何建议将不胜感激。

加油!

        try:

            if 'notavailable' not in requests.get('url' + str(service) + '&username=' + str(username), headers={'X-Requested-With': 'XMLHttpRequest'}).text:
                result = service + '\t' + " > " + username + " > " 'Available'
                print  result
                f = open("output.txt", "w")              
                f.write(result + "\n")
                f.close()

            else:
                print service + '\t' + " > " + username + " > " 'Not Available'

        except Exception as e:
            print e

【问题讨论】:

  • 好吧,你的代码只写了一行数据,即result变量。那么您如何期望更大的内容最终会出现在文件中?这可能是在您没有向我们展示的循环中吗?
  • 也许 result 变量只包含 one line of data 这就是为什么你的文件只包含一行。 print result 语句的结果是什么?
  • 也许您正在寻找open("output.txt", "a")

标签: python python-2.7


【解决方案1】:

你需要写

f = open("output.txt", "a")

这将追加文件,而不是覆盖您放入其中的任何其他内容。

【讨论】:

    【解决方案2】:

    在每次迭代中,您都在打开文件、擦除其内容、写入和关闭。最好只打开一次:

    f = open('output.txt', 'w')
    # do loop
        f.write(stuff)
    f.close()
    

    或者,更好:

    with open('output.txt', 'w') as f:
        while loop:
           f.write(stuff)
    

    这种方法不仅更干净,而且性能也更好,因为您可以缓存文件的内容,并使用最少的操作系统调用次数。

    【讨论】:

    • 如果出于任何原因必须每次都关闭文件,请在循环中使用“a”而不是“w”,它也可以正常工作。但是,如果您再次运行该程序,这将附加到现有文件中,因此也要注意这一点。
    • @ShadowFlame,如果你使用f.write 来记录错误日志,你如何只打开一次文件?
    • 在循环之前打开,在循环之后关闭。看看这个答案中的第一个例子,这是一个完美的例子
    • 这完全不适用于我所指的用例。在网络服务器上,我不会让文件无限期地打开;我想为特定目的打开它,并且仅用于该特定目的。您的示例适用于运行一次的单个过程(并且正是您应该为该用途执行的操作),而不适用于动态编辑日志文件,这正是附加存在的原因。当然,这并不是说这是处理错误报告的最佳/唯一方法,但这完全是一个不同的问题。
    • @Dave 我不同意。准确地说,您希望尽可能快地进行日志记录,而打开和关闭需要时间。此外,释放文件可能会干扰备份系统。请参阅this discussion. 对于这种情况,请使用选项buffering=0 打开它。
    【解决方案3】:

    我将大胆猜测并假设所有这些代码都发生在一个循环中。每次循环,你都会多写一行,但最后,你只有最后一行。

    如果这是问题所在,那就是问题所在:

            f = open("output.txt", "w")              
    

    当您以'w' 模式打开文件时,会截断所有现有文件。

    要解决此问题,请在循环外打开文件一次,而不是一遍又一遍地打开文件,或者以'a' 模式或'r+' 模式或其他不会截断文件的模式打开它。

    open 函数的文档或交互式解释器中的内联帮助解释了所有不同模式的含义。

    【讨论】:

      【解决方案4】:

      您是否尝试过使用参数“a” 所以: f = open("output.txt", "a")

      这将在末尾打开带有指针的文件。 http://www.pythonforbeginners.com/files/reading-and-writing-files-in-python

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多