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

2024-05-21 05:54:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我对我的代码有些疑问:

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()

这是存储书籍信息的代码,我想以后再访问(比如在图书馆)。但是,每次我添加/创建一本新书时,旧的一本就会被删除。谁能帮我重写代码,这样它就可以存储旧数据了。或者请解释一下正确的方法是什么?你知道吗


Tags: 代码txtcloseinputdefopenrecordbooks
3条回答

你必须使用

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

“w”重新创建文件(因此仅对新文件使用它,或者如果您不介意它将被覆盖,“a”将附加到文件。你知道吗

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

还有一些无关的建议:

  • 使用add代替索引,或者更好:使用字典
  • 使用英文变量名/注释。你知道吗
  • 使用代码检查文件读/写是否正常,如果文件无法读取怎么办 因为访问限制或磁盘空间太少而写入?你知道吗
  • 使用不同的输入、编写和打印功能,使测试/维护/扩展更加容易。你知道吗

我冒昧地对你的代码进行了一点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'表示append'w'表示write。在这种情况下,write意味着删除所有的内容,然后写下新的东西。还要注意,'a'模式也可以创建文件,您不需要临时切换到'w',因为('r'没有;'r'是用于read)。你知道吗

干杯!你知道吗

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

第一个

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

是负责重写文件中现有数据的代码段。 python提供的将一些新数据附加到现有数据的另一个选项是使用append'a'方法打开一个文件进行写入。所以你可以用

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

它不会用您输入的新数据替换文件。你知道吗

另一种方法是用read方法f = open('knjige.txt','r')打开文件,并将现有数据复制到变量(variable=f.read('knjige.txt'))。如果需要维护数据类型,还可以使用pickle module及其函数dump和load。 现在将新数据连接到“variable”中的值,然后再次以write方法打开文件并将其写回。你知道吗

相关问题 更多 >