【问题标题】:How to .seek() end of .txt file with Python 3.5如何使用 Python 3.5 .seek() 结束 .txt 文件
【发布时间】:2016-04-23 04:55:51
【问题描述】:

我正在制作一个程序,将用户的操作记录在用户友好的日志文件中,该文件存储为 .txt。到目前为止,它只记录了会话的开始和结束,这是完全相同的时间。但是,目前当我运行程序时,它会删除文件的先前内容。我相信这是由于光标正在寻求指向 (0, 0) 的事实。有没有办法到达文件的末尾?代码如下。


import atexit
import datetime

def logSession():
    sessionRecord = open(r'C:\Users\Aanand Kainth\Desktop\Python Files\Login Program\SessionRecords.txt', "r+")

     sessionRecord.seek(-1,-1)

     sessionRecord.write("Session Began: " '{:%Y-%m-%d | %H:%M:%S}'.format(datetime.datetime.now()) + "\n")

 def runOnQuit():
     sessionRecord = open(r'C:\Users\Aanand Kainth\Desktop\Python Files\Login Program\SessionRecords.txt', "r+")

     sessionRecord.seek(-1,-1)

     sessionRecord.write("Session Ended: " '{:%Y-%m-%d | %H:%M:%S}'.format(datetime.datetime.now()) + """\n-------------------------------------------------------------------------------------------\n""")

 logSession()

 atexit.register(runOnQuit)

如果您在计算机上创建必要的文件并运行此 .PY 文件,您会发现有时它可以正常工作,而有时则不能。谁能告诉我如何寻求到最后,或者是否有更好的解决方案来帮助我?这是一个自我分配的挑战,所以我不喜欢赠品,只是提示。

【问题讨论】:

  • 您在写入文件后并没有关闭文件,因此如果您在程序仍在运行时查看文件,您可能会看到不完整的数据,因为某些数据可能仍在缓冲区中,并且尚未物理写入磁盘。

标签: python python-3.x logging


【解决方案1】:

seek 的参数不正确,seek 有 2 个参数,一个偏移量(多少字节)以及描述从何处寻找的位置(开始:0,当前:1,结束:2)。所以你需要的是:

import io
sessionRecord.seek(0, io.SEEK_END)

或者:

sessionRecord.seek(0, 2)   # Py2

但是您可以通过以附加模式打开文件来避免这样做:

with open('<filename>', 'a'):
    sessionRecord.write(...)

【讨论】:

  • 等等,那会做什么呢?这不是把我排在第二排吗?
  • 它寻找到文件的末尾。
【解决方案2】:

只需以正确的模式打开文件。如果要添加到文件而不删除其先前的内容,请使用'a'(用于“追加”)而不是'r+',这是一种截断读/写。然后您将不再需要使用seek()

【讨论】:

  • 谢谢!因为这是首先发布的,并且有效,所以我会将其标记为已接受的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 1970-01-01
  • 1970-01-01
  • 2015-10-28
  • 1970-01-01
相关资源
最近更新 更多