如何将列表的内容保存到文件?

时间:2017-01-13 15:32:48

标签: python list

我对我的代码有一些疑问:

def entry_book():
    book = ["autor", "ime", "godina", "ISNB", "zanr", "cena", "broj"]
    print ("Podaci za knjigu:")
    book[0] = input ("Autor: ")
    book[1] = input ("Naslov: ")
    book[2] = input ("Godina: ")
    book[3] = input ("ISNB: ")
    book[4] = input ("Zanr: ")
    book[5] = input ("Cena: ")
    book[6] = input ("Kolicina: ")
    record= "{}|{}|{}|{}|{}|{}|{}".format (book[0], book[1], book[2], book[3],
                                           book[4], book[5], book[6])

    print (book)
    print (record)
    f = open('books.txt','w')
    f.write (record)
    f.close()
    f = open("books.txt")
    x = f.read()
    f.close()
    print (x)
    record1 = record.split('|')
    print (record1)

    second_meni()

这是存储书籍信息的代码,我想稍后访问(比如在图书馆)。但是,每次添加/创建新书时,旧书都会被删除。任何人都可以帮我重写代码,以便它也可以存储旧数据。或者请解释一下正确的方法是什么?

4 个答案:

答案 0 :(得分:6)

你必须使用

f = open('knjige.txt', 'a')

' W'重新创建文件(因此仅将其用于新文件,或者如果您不介意将其覆盖,则会附加到文件中。

请参阅python open built-in function: difference between modes a, a+, w, w+, and r+?

还有一些不相关的建议:

  • 使用add代替索引,甚至更好:使用字典
  • 使用英文变量名称/注释。
  • 使用代码检查文件读/写是否正常,如果文件不可用则该怎么办 写入是因为访问限制还是磁盘空间太小?
  • 使用不同的功能进行输入,书写和打印,使测试/维护/扩展变得更加容易。

答案 1 :(得分:2)

我冒了一下 pythonizing 你的代码。

def unos_knjiga():
    headers = ["Autor", "Naslov", "Godina", "ISNB", "Zanr", "Cena", "Kolicina"]
    print("Podaci za knjigu:")
    knjiga = [input("{}".format(obj + ': ')) for obj in headers]  # see 1
    zapis = '|'.join(knjiga)  # see 2

    print(knjiga)
    print(zapis)

    with open('knjige.txt', 'a') as f:  # see 3
        f.write(zapis + '\n')

    # i guess this is for testing?
    with open("knjige.txt", 'r') as f:
        x = f.read()
    print(x)

    # and this too?
    zapis1 = zapis.split('|')
    print(zapis1)

    # this is not mentioned anywhere
    second_meni()

1)这是列表理解。它通过循环遍历创建列表。在这种情况下,我们循环遍历header列表并使用其项来构造input语句。提供的输入存储在列表中。

2).join()方法。它做你明确做的。使用它们之间的字符串连接迭代器中的项目。

3)with关键字。管理文件,以便您不必。除非有理由不使用它,否则请使用它。这也是您的代码存在真正问题的地方。您必须使用'a'模式。 'a'用于追加'w'用于写入。在这种情况下,写意味着删除那里的所有内容并编写这些新东西。另请注意,'a'模式也可以创建文件,您无需暂时切换到'w''r'不会; 'r'用于读取< / em>的)。

干杯!

答案 2 :(得分:1)

我认为有两种方法可以做到这一点:

第一次

f = open('knjige.txt','w') 

是负责重写文件中现有数据的代码段。 python提供的用于向现有数据附加一些新数据的其他选项是打开文件以使用追加&#39; a&#39;方法。所以你可以用

替换你的上述陈述
f = open('knjige.txt','a')

它不会使用您输入的新数据替换文件。

<强> SECOND

其他选项是以读取方法f = open('knjige.txt','r')打开文件,并将现有数据复制到变量(variable=f.read('knjige.txt'))。如果需要维护数据类型,还可以使用 pickle模块及其函数 dump load 。 现在将您的新数据连接到&#39;变量&#39;中的值。并再次以write方法打开文件并将其写回。

答案 3 :(得分:0)

您打开文件的呼叫f = open('knjige.txt','w')打开文件,截断现有内容(如果存在)。如果使用附加内容的模式打开文件,例如a,则不应删除以前的行。有关打开读/写文件的详细信息,请参阅https://docs.python.org/2/library/functions.html#open