user14072457
user14072457

Reputation:

Write files when looping line by line instead of overwriting

I'm trying to write something in a file every second with the following code:

from datetime import datetime
import schedule
import time

def test():
    f = open(r"C:\logs.txt","w")
    time = datetime.now()
    f.write("test " + str(time))
    f.write("\n")

schedule.every().second.do(test)

while True:
    schedule.run_pending()
    time.sleep(1)
        

But when I'm looking at the logs.txt file, the result is this :

test 2020-08-08 21:10:52.605432

instead of (what I would like to do):

test 2020-08-08 21:10:52.605432
test 2020-08-08 21:10:53.605432
test 2020-08-08 21:10:54.605432
...

The code seems to overwrite the first line instead of writing line by line every time there is a new second. Could you help me ? Thanks

Updated code:

from datetime import datetime
import schedule
import time

def test():
    f = open(r"C:\logs.txt","a")
    time = datetime.now()
    f.write("test " + str(time))
    f.write("\n")
    f.close()
    

while True:

    schedule.every().second.do(test) 
    schedule.run_pending()
    time.sleep(1)

Upvotes: 0

Views: 124

Answers (1)

SuperStormer
SuperStormer

Reputation: 5407

Open your file in appending mode to avoid overwriting: open(r"C:\logs.txt","a"). Additionally, I suggest using a with statement to close the file automatically after you have finished writing.

Example Code:

from datetime import datetime
import schedule
import time

def test():
    with open(r"C:\logs.txt","a") as f:
        time = datetime.now()
        f.write("test " + str(time))
        f.write("\n")

schedule.every().second.do(test)

while True:
    schedule.run_pending()
    time.sleep(1)

Upvotes: 3

Related Questions