Прочитайте список из файла и добавьте его с помощью 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 не знает, что это список, и если файл не существует даже хуже, поскольку мне нечего преобразовать в список.

2 ответа

Попробуй это:

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

НО это совершенно небезопасно, если вы не знаете, где находится файл, поскольку он может включать любой код, чтобы что-либо сделать!


Было бы лучше не использовать файл python для настойчивости - что произойдет, если кто-то скачет вам usernames.py, в котором используется код эксплойта? Рассмотрим файл csv или рассол, или просто текстовый файл с одним пользователем в строке.

Тем не менее, если вы не открываете его как файл 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))

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

licensed under cc by-sa 3.0 with attribution.