python-3.x 如何.seek()到文本文件的结尾

v7pvogib  于 2023-10-21  发布在  Python
关注(0)|答案(2)|浏览(169)

我正在编写一个程序,它将用户的操作记录在一个用户友好的日志文件中,该文件以文本文件的形式存储。到目前为止,它只记录会话的开始和结束,这是完全相同的时间。然而,目前当我运行该程序时,它会删除文件的先前内容。我相信这是由于光标正在寻找点(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文件,您会发现有时它可以按需工作,而其他时候则不能。谁能告诉我如何寻求到底,或者是否有更好的解决方案来帮助我?这是一个自我分配的挑战,所以我不喜欢赠品,只是提示。

1tuwyuhd

1tuwyuhd1#

seek的参数不正确,seek需要2个参数,一个偏移量(多少字节)和whence,描述从哪里开始查找(start:0,current:1,end:2)。所以你需要的是:

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

或者:

sessionRecord.seek(0, 2)   # Py2

但是你可以通过在append模式下打开文件来避免这样做:

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

xienkqul2#

在正确的模式下打开文件。如果你想添加到一个文件而不删除它以前的内容,使用'a'(“append”)而不是'r+',这是一个截断读/写。您将不再需要使用seek()

相关问题