Python 是否有方法将项目永久添加到列表文件?
我正在制作一个Python脚本,它应该允许我添加一个公会列表并按字母顺序排序。因为我已经有了一个行业协会的列表,所以我编写了一个Python文件,其中包含了我已经拥有的名称列表。现在我需要将新项目添加到该列表中,因为该程序应该被多次使用,并且我需要将完整的列表与每次使用后输入的新项目一起保存 这是我当前的代码:Python 是否有方法将项目永久添加到列表文件?,python,python-3.x,Python,Python 3.x,我正在制作一个Python脚本,它应该允许我添加一个公会列表并按字母顺序排序。因为我已经有了一个行业协会的列表,所以我编写了一个Python文件,其中包含了我已经拥有的名称列表。现在我需要将新项目添加到该列表中,因为该程序应该被多次使用,并且我需要将完整的列表与每次使用后输入的新项目一起保存 这是我当前的代码: from g_list import guilds#从g_list.py文件夹导入协会列表 def g_add(): f=开放('Guilds\u Sorted.txt','w') f、
from g_list import guilds#从g_list.py文件夹导入协会列表
def g_add():
f=开放('Guilds\u Sorted.txt','w')
f、 写(“\n”。加入(公会))
f、 关闭()
尽管如此:
帮会=输入(“帮会的名字是什么?”)#这个输入可以保存在g_list.py的帮会列表中吗
f=开放('Guilds\u Sorted.txt',“a”)
f、 写入('\n')
f、 写作(公会)
虽然可以更新稍后导入的Python文件,但这种情况非常少见
为什么不将初始协会存储在文本文件中,然后使用Python脚本向其中添加新协会?可以这样做:
PATH='Guilds\u Sorted.txt'
def main():
#首先将已保存的行会从文件读入内存:
打开(路径“rt”)作为文件:
行会=file.read().splitlines()
#现在请用户添加新的公会:
尽管如此:
帮会=输入(“帮会的名字是什么?”)
如果没有:
打破
公会.附加(公会)
#如果需要,可以在此处对列表进行排序、删除重复项等。
# ...
#将新的完整列表写回文件:
打开(路径“wt”)作为文件:
file.write('\n'.join(协会))
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
注意,我添加了一个退出条件。通过输入no name(空字符串),程序将退出。我不知道是否正确理解了您的问题。让我表达一下我的想法 我假设您希望在从stdin获得输入后更改
g_列表
,并将g_列表
的更改保存在其原始文件中
g_list.py的外观如下:
#g#u list.py
公会=['a','b']
以及另一个名为g_add.py的文件,该文件提供了添加操作:
# g_add.py
import pickle
from g_list import guilds
def g_add():
# I think you want the `Guilds_Sorted.txt` be a temp file
# and each time you run this script recreate that file.
# use a `with` statement to do this so you don't need to
# open and close the file manuallyy
# the interpreter will do those jobs for you
with open('Guilds_Sorted.txt', 'w'):
pass # since you just want to create a file, do nothing
try:
while True:
guild = input("What is the guild's name ? ")
with open('Guilds_Sorted.txt', 'a') as f:
f.write(guild + '\n')
guilds.append(guild)
# if you want to change the original guilds in g_list.py
# you may have to rewrite the g_list.py like this
guilds.sort() # sort it before you save
with open('g_list.py', 'w') as f:
f.write('guilds = [')
for guild in guilds:
f.write("'" + guild + '",')
f.write("]")
# actually this is not so graceful...
# if you really want to save the data in a list
# you can refer to the `pickle` standard library
# it looks like this
# with open("g_list.pkl", "wb") as f:
# pickle.dump(guilds, f)
# and when you want to use guilds
# with open("g_list.pkl", "rb") as f:
# guilds = pickle.load(f)
except KeyboardInterrupt:
# you can exit by press `ctrl + c`
print("exit...")
if __name__ == "__main__":
g_add()
你有什么问题?你知道怎么写文件吗?作为一个新用户,请阅读。我可以问一下,为什么你的行会列表都是.py格式的吗?我认为您正在尝试做的事情通常都是通过文件来完成的,即在运行之间存储数据。将你的行会存储在一个文件中,并在运行脚本时读取该文件有什么问题?用户10987432我一点也不介意我不知道还有什么更好的方法,仅此而已谢谢,有什么文档//我可以阅读以熟悉这一点的教程吗?@Koriyou,不客气。这是非常有用的,虽然我可以想象它在一开始有点势不可挡。您可以从开始,偶尔浏览一下站点。很久以前,我开始使用,它可能更“用户友好”,我想它也会给你一个好的开始。谢谢你,这也会起作用,但是wovano的代码比我最初尝试的更有意义do@Xu_shan_shan,正如您已经指出的,仅以这种方式将公会写入Python文件并不安全。如果公会只包含一个引号,它就会中断。使用
pickle
确实解决了这个问题,但只要公会都是单行字符串,那么只使用文本文件就容易多了。@wovano,是的,你的代码干净漂亮!这就是一个明确的答案。我从你身上学到了很多。我也会努力做一个更好的帮手,哈哈:)