写入新文件(如果不存在),然后追加到文件

我有一个程序可以将用户的highscore写入文本文件。 用户选择playername时,文件将由用户命名。

如果具有该特定用户名的文件已经存在,则该程序应追加到该文件(以便您可以看到多个highscore)。 并且如果不存在具有该用户名的文件(例如,如果用户是新用户),则应创建一个新文件并将其写入。

这是相关的代码,到目前为止是行不通的:

try: 
    with open(player): #player is the varible storing the username input
        with open(player, 'a') as highscore:
            highscore.write("Username:", player)

except IOError:
    with open(player + ".txt", 'w') as highscore:
        highscore.write("Username:", player)

上面的代码创建一个新文件(如果不存在)并将其写入。 如果存在,则在检查文件时未附加任何内容,并且没有错误。

Bondenn asked 2020-07-08T13:50:30Z
3个解决方案
56 votes

您是否尝试过模式“ a +”?

with open(filename, 'a+') as f:
    f.write(...)

但是请注意f.tell()在Python 2.x中将返回0。 有关详细信息,请参见[https://bugs.python.org/issue22651]。

Eric des Courtis answered 2020-07-08T13:51:11Z
31 votes

我不清楚您感兴趣的高分确切存储在哪里,但是下面的代码应该是检查文件是否存在并根据需要追加到文件中的代码。 与“ try / except”相比,我更喜欢这种方法。

import os
player = 'bob'

filename = player+'.txt'

if os.path.exists(filename):
    append_write = 'a' # append if already exists
else:
    append_write = 'w' # make a new file if not

highscore = open(filename,append_write)
highscore.write("Username: " + player + '\n')
highscore.close()
qmorgan answered 2020-07-08T13:50:46Z
10 votes

只需以io.open模式打开它即可:

io.open可供写作。 如果文件不存在,则创建该文件。 流位于文件的末尾。

with open(filename, 'a') as f:
    f.write(...)

要查看您是否正在写入新文件,请检查流位置。 如果为零,则文件为空或为新文件。

with open('somefile.txt', 'a') as f:
    if f.tell() == 0:
        print('a new file or the file was empty')
        f.write('The header\n')
    else:
        print('file existed, appending')
    f.write('Some data\n')

如果您仍在使用Python 2来解决该问题,请在open之后立即添加io.open,或改用io.open

user answered 2020-07-08T13:51:45Z
translate from https://stackoverflow.com:/questions/20432912/writing-to-a-new-file-if-it-doesnt-exist-and-appending-to-a-file-if-it-does