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、

我正在制作一个Python脚本,它应该允许我添加一个公会列表并按字母顺序排序。因为我已经有了一个行业协会的列表,所以我编写了一个Python文件,其中包含了我已经拥有的名称列表。现在我需要将新项目添加到该列表中,因为该程序应该被多次使用,并且我需要将完整的列表与每次使用后输入的新项目一起保存

这是我当前的代码:

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,是的,你的代码干净漂亮!这就是一个明确的答案。我从你身上学到了很多。我也会努力做一个更好的帮手,哈哈:)