【问题标题】:How can I use Python 3 to write text to a file in Windows 10如何使用 Python 3 将文本写入 Windows 10 中的文件
【发布时间】:2017-03-27 07:15:47
【问题描述】:

我试过的代码是:

dtf = open("C:\\Users\\foggi\\Documents\\Fred.txt","w")
dtf.write("Hello people")

这在 Android 上运行良好(对文件路径进行了适当的更改),但在 Windows 10 下它会创建一个空文件。我该如何克服这个问题?

【问题讨论】:

    标签: python windows-10 file-access


    【解决方案1】:

    文件为空的原因是您在打开文件对象之前没有关闭它。

    建议大部分时间使用with 打开文件,因为它会在后台为您关闭文件对象:

    with open("C:\\Users\\foggi\\Documents\\Fred.txt","w") as f:
        f.write("Hello people")
    

    【讨论】:

      【解决方案2】:

      理论上,文件应该在其终结器运行时关闭,但这并不保证会发生。您需要关闭文件以将其缓冲区刷新到磁盘,否则您“写入”的数据可能会挂在 Python 脚本的内存中。

      确保文件关闭的最佳方法是使用with 块。

      with open("C:\\Users\\foggi\\Documents\\Fred.txt", "w") as fp:
          fp.write("Hello people")
      

      另一个好方法是只使用pathlib

      import pathlib
      path = pathlib.Path("C:\\Users\\foggi\\Documents\\Fred.txt")
      path.write_text("Hello people")
      

      您也可以手动关闭文件,但出于风格问题,不建议这样做:

      fp = open("C:\\Users\\foggi\\Documents\\Fred.txt", "w")
      fp.write("Hello people")
      fp.close()
      

      原因是openclose 之间可能会发生某些事情,这会导致close 被跳过。在这么短的程序中,这无关紧要,但在较大的程序中,您最终可能会泄漏文件句柄,因此建议在任何地方使用with

      【讨论】:

        【解决方案3】:

        如果要查看更改,您需要关闭文件:

        我总是使用with,它会在块结束时关闭文件。

        with open("C:\\Users\\foggi\\Documents\\Fred.txt","w") as fs:
            fs.write("Hello people")
        

        或者在你写完之后关闭文件。使用file.close()

        dtf = open("C:\\Users\\foggi\\Documents\\Fred.txt","w")
        dtf.write("Hello people")
        dtf.close()
        

        【讨论】:

          【解决方案4】:

          您必须在完成写入后关闭该文件。

          dtf = open("C:\\Users\\foggi\\Documents\\Fred.txt","w")
          dtf.write("Hello people")
          dtf.close()
          

          或者,最好是:

          with open("C:\\Users\\foggi\\Documents\\Fred.txt","w") as dtf:
              dtf.write("Hello people")
          

          您可以阅读更多关于 with 块的信息,包括如何创建您自己的对象,这些对象可以与 with 一起使用,这里是:http://preshing.com/20110920/the-python-with-statement-by-example/(第一个 Google 搜索结果)。

          【讨论】:

          • 非常感谢。那工作得很好。顺便说一句,我在原始测试中确实关闭了文件,只是忘记发布“dtf.close”!
          【解决方案5】:
          dtf = open("C:\\Users\\foggi\\Documents\\Fred.txt","a+")
          dtf.write("Hello people")
          

          你可以用这个 a+ 来代替

          【讨论】:

            猜你喜欢
            • 2019-11-01
            • 1970-01-01
            • 2019-08-10
            • 1970-01-01
            • 2015-11-08
            • 2018-09-17
            • 1970-01-01
            • 2017-05-31
            • 2016-07-27
            相关资源
            最近更新 更多