如何使用Python 3.5的.seek()结束.txt文件

时间:2016-01-18 05:07:33

标签: python python-3.x logging

我正在创建一个程序来记录用户在用户友好的日志文件中所做的事情,该文件存储为.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文件,您会发现有时它会按预期工作,有时则不会。任何人都可以告诉我如何寻求最终,或者是否有更好的解决方案来帮助我?这是一个自我指定的挑战,所以我不欣赏赠品,只是提示。

2 个答案:

答案 0 :(得分:3)

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

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

或者:

sessionRecord.seek(0, 2)   # Py2

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

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

答案 1 :(得分:1)

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