首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中保存/加载列表

在Python中保存/加载列表
EN

Stack Overflow用户
提问于 2012-05-19 03:45:58
回答 3查看 1.6K关注 0票数 2

我是python (和一般编程)的新手,正在为一个典型的类创建一个数据库/注册表。我希望用户能够从数据库中添加和删除学生,我使用列表主要用于此,但遇到了树桩。

每当我重新启动程序时,用户修改的列表都会返回到我在代码中指定的默认列表。我在互联网上四处寻找,试图将列表保存到一个单独的txt文件中。但是,每次我重新启动程序时,txt文件也会恢复为默认值。我希望您能给我一种方法来保存对列表所做的更改,并保留它们。下面是代码(它不是很好):

代码语言:javascript
复制
def menu():
    print "*****************CLASS REGISTER*****************"
    print "Press 1 See The List Of Pupils"
    print "Press 2 To Add New Pupils"
    print "Press 3 To Remove Pupils"
    print "Press 0 To Quit \n"

filename = open('pupil.txt','r')

pupil = ["James Steele", "Blain Krontick", "Leeroy Jenkins", "Tanvir Choudrey"]

def see_list(x):
    print x

def add_pupil(x):
    print "You have chosen to add a new pupil.\n"
    option = raw_input("Please type the childs name.")
    x.append(option)
    filename = open('pupil.txt','w') 
    filename.write('\n'.join(pupil)) 
    filename.close() 
    print option, "has been added to the system."
    return x

def delete_pupil(x):
    print "You have chosen to remove a pupil.\n"
    option = raw_input("Please type the childs name.")
    if option in x:
        x.remove(option)
        filename = open('pupil.txt','w') 
        filename.write('\n'.join(pupil)) 
        filename.close() 
        print option, "has been removed from the system."
    else:
        print "That person is not in the system."
    return x


one = 1
while one != 0:
    menu()
    option = input() 
    if option == 1:
        see_list(pupil)
    elif option == 2:
        add_pupil(pupil)
    elif option == 3:
        delete_pupil(pupil)
    elif option == 0:
        break
    else:
        print "That is not a valible choice."

filename = open('pupil.txt','w') 
filename.write('\n'.join(pupil)) 
filename.close() 


if option == 0:
    quit
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-19 03:48:08

您只是打开了pupil.txt文件,而没有读回它的内容。你需要这样的东西:

代码语言:javascript
复制
filename = open('pupil.txt', 'r')
contents = filename.read()
filename.close()

pupil = [name for name in contents.split('\n') if name]

此外,您还需要处理pupil.txt文件不存在的情况;这可以通过IO调用周围的try..except块来完成。

最后,正如上面提到的一个注释,看看pickle模块,它允许您以Python的内部格式将Python对象存储在文件中(这种格式并不真正可读,但可以省去很多麻烦)。

票数 4
EN

Stack Overflow用户

发布于 2012-05-19 03:50:22

与您的问题不直接相关,但如下所示:

代码语言:javascript
复制
one = 1
while one != 0:
    ...

是愚蠢的。你所需要的是:

代码语言:javascript
复制
while True:
    ...
票数 1
EN

Stack Overflow用户

发布于 2012-05-19 03:53:10

这就是数据库的用途。使用sqlite -一个简单的基于文件的数据库,其库来自bundled with python

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10658818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档