Прочитать список из файла и добавить к нему с помощью Python

#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))
  

Если имена пользователей содержат запятые или заканчиваются кавычками, вы должны быть более осторожны.