Python读取txt文件生成列表转换为Book对象实现图书库存管理
从books.txt文本行转换为Book类实例的实现方案
核心注意点
- 从文本文件读取的所有内容默认均为字符串类型,其中
库存总量、已借出数量两个字段需要参与借出、归还、库存统计等数值计算,必须在实例化阶段转为整数,否则后续运算会触发类型错误。 - 拆分字段后建议增加空行跳过、字段数量校验逻辑,避免文件中存在误输入的空行、缺字段的坏行导致整个程序崩溃,这类容错处理在课程项目中会明显提升程序稳定性。
- 只要拆分得到的字段顺序和Book类
__init__方法的参数顺序完全一致(书名、作者、ISBN、索书号、库存总量、已借出数量),就可以用*列表名的方式直接解包传参,不需要逐个写索引取值,代码更简洁。
完整衔接代码
你已经完成了文件逐行读取、拆分、Book类定义三个部分,只需要补充字段校验、类型转换、实例追加三个步骤即可完成衔接,参考实现如下:
class Book: def __init__(self, title, author, isbn, callnumber, stock, loaned): self.title = title self.author = author self.isbn = isbn self.callnumber = callnumber # 数值字段转整数 self.stock = int(stock) self.loaned = int(loaned) # 保留你已经编写完成的各属性getter方法即可 def get_title(self): return self.title def get_author(self): return self.author def get_isbn(self): return self.isbn def get_callnumber(self): return self.callnumber def get_stock(self): return self.stock def get_loaned(self): return self.loaned # 初始化存储所有图书对象的内存列表 books = [] # 读取文件并实例化对象 with open("books.txt", "r", encoding="utf-8") as f: for line in f: # 去除首尾空白字符 line_content = line.strip() # 跳过文件中可能存在的空行,避免报错 if not line_content: continue # 按分号拆分字段,这一步你已经实现 fields = line_content.split(";") # 校验字段数量,跳过格式错误的坏行,避免程序崩溃 if len(fields) != 6: print(f"跳过格式异常的行:{line_content}") continue # 拆分后的字段顺序与Book类构造参数顺序完全匹配,可直接解包传参 book_obj = Book(*fields) # 将实例追加到内存列表 books.append(book_obj)
效果验证
读取完成后可以通过简单测试确认对象生成正确:
# 打印第一本图书的可借库存,验证数值属性转换正常 if books: first_book = books[0] print(f"书名:{first_book.get_title()}") print(f"可借数量:{first_book.get_stock() - first_book.get_loaned()}")
配套保存逻辑参考
匹配你「用户主动选择才保存到文件」的需求,保存时遍历内存中的Book对象列表,按原格式拼接每行内容覆写回文件即可:
def save_to_file(): with open("books.txt", "w", encoding="utf-8") as f: for book in books: # 按原分号分隔格式拼接每行内容 write_line = f"{book.title};{book.author};{book.isbn};{book.callnumber};{book.stock};{book.loaned}\n" f.write(write_line)
内容的提问来源于stack exchange,提问作者JadronAU
相关产品推荐
相关产品推荐

