从文件中读取列表并使用Python追加到它

时间:2014-07-01 13:53:49

标签: 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)

这给了我一个未解决的错误'追加'。我怎样才能做到这一点? Python不知道它是一个列表,如果文件不存在甚至最糟糕,因为我没有任何东西可以转换为列表。

2 个答案:

答案 0 :(得分:0)

试试这个:

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 :(得分:0)

最好不要使用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))

如果用户名包含逗号或以引号结尾,则必须更加小心。