#python
#python
Вопрос:
У меня есть файл под названием usernames.py который может содержать список или вообще существует:
usernames.py
['user1', 'user2', 'user3']
В Python я теперь хочу прочитать этот файл, если он существует, и добавить в список нового пользователя или создать список с этим пользователем, т.Е. [‘user3’]
Это то, что я пробовал:
with open(path 'usernames.py', 'w ') as file:
file_string = host_file.read()
file_string.append(instance)
file.write(file_string)
Это выдает мне неразрешенную ошибку ‘append’. Как я могу этого добиться? Python не знает, что это список, и если файл не существует, еще хуже, поскольку мне нечего конвертировать в список.
Комментарии:
1. Да, но поскольку это «выглядит» как список, Python не знает, или я должен сказать python, что это список?
2. Вы должны использовать
r
режим. В противном случае файл будет усечен до того, как вы его прочитаете.3. @falsetru будет ли a работать так, как мне нужно для создания файла, если он не существует?
4. @Spike, Нет. Вы не сможете изменить положение файла (
file.seek
), если откроете файл с помощьюa
режима. (По крайней мере, в Linux запись всегда происходит в конце файла.)5. будет работать для чтения, только если вы начинаете с
file.seek(0)
(начните с начала), в противном случае вы уже являетесь концом файла.
Ответ №1:
Попробуйте это:
import os
filename = 'data'
if os.path.isfile(filename):
with open(filename, 'r') as f:
l = eval(f.readline())
else:
l = []
l.append(instance)
with open(filename, 'w') as f:
f.write(str(l))
НО это довольно небезопасно, если вы не знаете, откуда файл, поскольку он может содержать любой код для выполнения чего угодно!
Комментарии:
1. Не уверен, почему все ненавидят этот ответ?
2. Не уверен, почему, Джейми. Вы, похоже, прочитали мой OP и ответили на вопрос, спасибо.
Ответ №2:
Было бы лучше не использовать файл Python для сохранения — что произойдет, если кто-то подсунет вам usernames.py в нем есть код эксплойта? Рассмотрим файл CSV или pickle, или просто текстовый файл с одним пользователем в строке.
Тем не менее, если вы не откроете его как файл Python, должно сработать что-то вроде этого:
from os.path import join
with open( join(path, 'usernames.py'), 'r ') as file:
file_string = file.read()
file_string = file_string.strip().strip('[').strip(']')
file_data = [ name.strip().strip('"').strip("'") for name in file_string.split(',' )]
file_data.append( instance )
file.fseek(0)
file.write(str(file_data))
Если имена пользователей содержат запятые или заканчиваются кавычками, вы должны быть более осторожны.