python - Python 文件未附加在 Raspberry Pi 上
问题描述
我对 Python 和 Pi'ing 很陌生,并且希望在 Raspberry Pi 上附加文本文件方面得到一些帮助。我的脚本将调用 GET 或 POST REST API,并为每次调用写入时间、状态和原因。
我从 grepit在 Python 中的简单 URL GET/POST 函数中的评论中获得了调用信息,它工作得很好。
为了附加我的文件,我使用以下代码:
#...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)
我读到的关于类似问题的内容是该文件未关闭或刷新。但是,如果我尝试print(file.read())
在“with”外部进行调试,则会收到一个错误,即文件已关闭,而在 with 内部进行调试则不显示任何内容。我也试过没有 with 和特别说明file.close()
。我已经使用它调试了字符串变量print(string)
,它按预期显示。
有什么建议么?
最后注意事项:
- 我知道以“a+”形式打开文件确实会以读写模式打开它。这目前仅用于我的调试目的。
解决方案
当使用追加模式打开文件时"a+"
,光标位于文件末尾。这就是为什么调用.write()
将附加到文件末尾而不是覆盖它的原因。
当您调用块file.read()
时with
,它会从最后一个字符开始读取文件,这就是您的打印输出为空的原因。
要打印您需要寻找到文件开头的内容。
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 中应该有一个文件,其中包含您的所有尝试。
此外,当您尝试在块.read()
外调用时出现错误的原因with
是因为file.close()
在块退出时被隐式调用。
open()
返回一个上下文管理器。您可以在此处阅读有关 python 中的上下文管理器的信息。它们非常有用,很值得了解。我经常在工作中编写新的上下文管理器。
推荐阅读
- javascript - Why can I not use an inline function for a Screen component?
- kubernetes - minikube 上的 MYSQL Pod 失败(mkdir:无法创建目录'/bitnami/mysql/data':设备上没有剩余空间)
- java - JPA - ManyToOne:在不使用整个对象的情况下连接列和查询表
- php - 问题:提交项目的第二页时,浏览器中不断出现错误
- tooltip - 使用查找类型过滤器过滤工具提示中的视觉对象
- reactjs - Next.js 只用一个 getServerSideProps 从索引中捕获所有路由
- tensorflow - 融合 ResNet-50 和 YOLO 算法以增强深度学习对象检测
- javascript - 滑块组件在 React 中无法正常工作
- java - 在 try-block 中声明的 finally-block 中关闭 Scanner/PrintStream
- php - Stripe:在 Laravel 中检索 paymentIntent?