2013-12-06 4 views
16

У меня есть программа, которая записывает 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) 

Приведенный выше код создает новый файл, если он не существует, и пишет к нему. Если он существует, при проверке файла ничего не было добавлено, и я не получаю ошибок.

+0

Какова цель первого 'with open (player):' statement? Кроме того, в вашем обработчике исключений вы создаете другой файл 'player + '.txt'', чем вы пытались писать в первую очередь. –

+0

@MarkkuK Я взял это из другого вопроса в stackoverflow, где вы проверяете, существует ли файл. Таким образом, с open (player): проверяет, существует ли файл, по крайней мере, так я думал. Okey, я вижу, просто подумал, что мне нужно использовать «.txt», чтобы файл был текстовым файлом. – Bondenn

+0

в любом случае, вы можете просто использовать 'open (whatever, 'a') в качестве рекорда:', и он будет делать то, что вы хотите: создать файл, если он не существует, или добавить к нему, если он существует –

ответ

16

Непонятно, где именно хранится высокий балл, но код, приведенный ниже, должен быть тем, что вам нужно, чтобы проверить, существует ли файл и приложить его к нему, если это необходимо. Я предпочитаю этот метод «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() 
+0

Это работает отлично! Большое спасибо! – Bondenn

+2

Разве это не склонно к состоянию гонки? – Mehrdad

+2

Почему бы не просто открыть его с режимом «a +»? –

10

Вы пробовали режим 'a +'?

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

Однако обратите внимание, что f.tell() возвращает 0 в Python 2.x. См. https://bugs.python.org/issue22651.

+1

Upvote, хотя вам нужно префикс этого предложения с помощью «если вы не обеспокоены значением, сообщенным' f.tell() '. –

+0

@personal_cloud спасибо не знал об этой ошибке –

Смежные вопросы