1

我有一个图书馆,我想在其中创建一本新书,然后将其添加到我的书单中。我遇到的问题是在调用之间保存文件。

这就是我读取文件的方式:

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

4 回答 4

7

为了保存到文件,您必须以写入附加模式打开它。

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

有关更多信息,请参阅 Python 关于内置函数的文档。

于 2012-05-02T18:21:34.693 回答
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+'避免这样做,但这需要更多的工作来协调现有内容与您的书单。
  • *in将read_bookfile列表拆分,就好像您将它们作为单独的参数传递给函数一样。
  • '/'.join()获取字符串列表并使用斜杠将它们连接在一起:'/'.join(["a", "b", "c"])is "a/b/c"。不过,它需要字符串,这就是我这样做的原因str(isbn)(因为book.isbn它是一个 int)。
于 2012-05-02T18:25:17.837 回答
1

Python 是“包括电池”的,记得吗?

考虑使用“csv”模块:

use csv

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

我认为这些有很多选项(例如,您可以将分隔符设置为逗号以外;您可以读入字典列表等)

请参阅用于 CSV 读取器/写入器的 Python 文档

于 2012-05-02T20:20:10.790 回答
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()
于 2012-05-02T18:27:24.847 回答