我有一个图书馆,我想创建一本新书,然后将其添加到我的书籍列表中。 我遇到的问题是在两次通话之间保存文件。
这是我阅读文件的方式:
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
现在我想知道如何保存到我的文件中。
答案 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(...)
我认为它们有很多选项(比如你可以将分隔符设置为逗号以外的其他分类;你可以读入字典列表等)。
答案 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()