【问题标题】:Python file not appending on Raspberry PiPython 文件未附加在 Raspberry Pi 上
【发布时间】:2021-05-17 06:05:21
【问题描述】:

我对 Python 和 Pi'ing 还很陌生,希望在 Raspberry Pi 上附加文本文件方面得到一些帮助。我的脚本将调用 GET 或 POST REST API,并为每次调用写入时间、状态和原因。

我从 grepit 在Simple URL GET/POST function in Python 的评论中获得了通话信息,效果很好。

为了附加我的文件,我使用以下代码:

#...Some working code...

dateNow = datetime.datetime.now()
string = ("\n" + dateNow.strftime("%c") + " - " + str(response.status) +
          ": " + response.reason + "\n")

with open('MyCallLog.txt', 'a+') as file:
    file.write(string)

我读到的关于类似问题的内容是该文件未关闭或刷新。但是,如果我尝试在“with”之外使用print(file.read()) 进行调试,我会收到一个错误,即文件已关闭,并且在 with 内进行调试时什么也没有显示。我也试过没有 with 并特别说明file.close()。我已经使用print(string) 调试了字符串变量,它按预期显示。

有什么建议吗?

最后的笔记:

  • 我知道以“a+”形式打开文件确实会以读写模式打开它。这目前仅用于我的调试目的。

【问题讨论】:

  • 顺便说一句,看看使用str.format() 函数和/或'f-strings'的字符串格式。这将使您的字符串连接更简单,而不是当前使用的 JS 格式。
  • 没有看到整个函数或更多代码,我无法确定发生了什么。也许如果您的脚本持续运行,您总是在上下文管理器中?
  • 试试just你上面的sn-p;我尝试了类似的东西(只是一个不同的字符串)并且工作正常。 (也在 Pi 上)。只需确保您正在查看在 current 目录中创建的文件。

标签: python file append raspberry-pi4


【解决方案1】:

当使用"a+" 以追加模式打开文件时,光标位于文件末尾。这就是为什么对.write() 的调用将附加到文件末尾而不是覆盖它。

当您在 with 块中调用 file.read() 时,它会从最后一个字符开始读取文件,这就是您的打印输出为空的原因。

要打印需要查找的内容到文件的开头。

with open("myfile.txt", "a+") as file:
    file.write("some_text")
    file.seek(0)
    print(file.read()) # "some_text"

更好的是,只需再次打开文件进行调试。

with open("myfile.txt", "a+") as file:
    file.write("some_text")

with open("myfile.txt", "r") as file:
    print(file.read())

您要附加的代码实际上是正确的。 CWD 中应该有一个文件,其中包含您的所有尝试。

此外,当您尝试在 with 块之外调用 .read() 时出现错误的原因是因为在块退出时隐式调用了 file.close()

open() 返回一个上下文管理器。您可以在 python here 中阅读有关上下文管理器的信息。它们非常有用,很值得了解。我经常在工作中编写新的上下文管理器。

【讨论】:

  • 很好的答案,感谢提及上下文管理器的详细信息。
  • 太好了,谢谢!所以我玩了一下,它似乎在实际文件中工作,但是 file.seek(0) 使我看不到我的更改(或任何以前的数据)
猜你喜欢
  • 1970-01-01
  • 2022-10-02
  • 1970-01-01
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-14
相关资源
最近更新 更多