将列表保存到文件

时间:2012-05-02 18:17:29

标签: python file list save

我有一个图书馆,我想创建一本新书,然后将其添加到我的书籍列表中。 我遇到的问题是在两次通话之间保存文件。

这是我阅读文件的方式:

def read_bookfile():

    try:
        booklibrary_file = open("a.txt")

        booklibrary_list = []
        booklist = booklibrary_file.readlines()
        for rad in booklist:
            linelist = rad.split("/")
            title = linelist[0]
            firstname = linelist[1]
            lastname = linelist[2]
            isbn = int(linelist[3])
            availability = linelist[4]
            borrowed = linelist[5]
            late = linelist[6]
            returnday = linelist[7]
            b = Book(title, firstname, lastname, isbn, availability, borrowed, late, returnday) 
            booklibrary_list.append(b)
        booklibrary_file.close()
        return booklibrary_list

现在我想知道如何保存到我的文件中。

4 个答案:

答案 0 :(得分:7)

为了保存到文件,您必须在Write-Append模式下打开它。

library_file = open("a.txt", "a")
...
library_file.write("Some string\n")
...
library_file.close()

有关详细信息,请参阅有关Built-in Functions的Python文档。

答案 1 :(得分:1)

首先,这是一种更简单的阅读方式,假设这八个字段是唯一的:

def read_bookfile(filename="a.txt"):
    with open(filename) as f:
        return [Book(*line.split('/')) for line in f]

现在,保存:

 def save_bookfile(booklist, filename='a.txt'):
     with open(filename, 'w') as f:
         for book in booklist:
             f.write('/'.join([book.title, book.firstname, book.lastname, str(book.isbn),
                               book.availability, book.borrowed, book.late, book.returnday])
                     + '\n')

假设Book模型只是在传递这些属性时将其保存(作为字符串)。

说明:

  • with语句打开您的文件,并确保在控件超出语句时关闭它,即使存在异常或类似内容。
  • 最好将文件名作为参数传递,因为它允许您在不更改功能的情况下使用不同的文件名;这使用默认参数,因此您仍然可以以相同的方式调用它。
  • [... for line in f]是一个列表理解,就像执行lst = []; for line in f: lst.append(...)一样,但编写和运行速度更快。
  • 'w'模式打开文件可以写入文件。请注意,这将删除文件中已存在的内容;您可以使用'a''w+'来避免这种情况,但这需要更多的工作来将现有内容与您的图书清单进行协调。
  • *中的read_bookfile拆分列表,就好像您将它们作为函数的单独参数传递一样。
  • '/'.join()获取字符串列表并使用斜杠将它们连接在一起:'/'.join(["a", "b", "c"])"a/b/c"。但它需要字符串,这就是我str(isbn)的原因(因为book.isbn是一个int)。

答案 2 :(得分:1)

Python是“包含电池”,还记得吗?

考虑使用“csv”模块:

use csv

csv.reader(...)
csv.writer(...)

我认为它们有很多选项(比如你可以将分隔符设置为逗号以外的其他分类;你可以读入字典列表等)。

请参阅Python Docs for CSV reader/writer

答案 3 :(得分:0)

我必须对你的Book课做一些假设,但我认为这可能有助于你走上正确的轨道:

bookList = read_bookfile()

outfile = open("booklist.txt", "w")

for book in bookList:
        bookStr = book.title + " " + book.firstname + " " + book.lastname + " " + book.isbn + " " + book.availability + " " + book.borrowed + " " + book.late + " " + book.returnday + "\n"
        outfile.write(bookStr)

outfile.close()