
本文旨在解决 Python 中修改文本文件中特定行 ISBN 的问题。通过将文件操作分解为读取、修改和写入三个独立函数,提供了一种更清晰、更易于维护的解决方案。重点介绍了如何将文件内容转换为易于操作的数据结构,并安全地将修改后的数据写回文件。
原始代码存在几个问题:
为了解决这些问题,我们将代码重构为三个独立的函数,使代码更易于理解和维护。
首先,创建一个函数 getBooks(file),该函数读取文本文件,并将每一行转换为一个字典,然后将所有字典放入一个列表中。这样,我们就得到了一个表示所有书籍的列表,每个书籍都是一个字典。
立即学习“Python免费学习笔记(深入)”;
def getBooks(file):
"""
该函数 `getBooks` 读取文件,将其内容拆分为行,然后将每一行拆分为
键值对,以创建一个表示书籍的字典列表。
:param file: `file` 参数是包含书籍信息的文件名或路径
:return: 字典列表,其中每个字典代表一本书,其中包含其属性的键值对。
"""
# 打开文件
with open(file, 'r') as booksFile:
content = booksFile.read().splitlines()
# 将每一行拆分为一个列表
lines=[line.split(' -- ') for line in content]
# 将每一行中的条目转换为字典的键:值对
books=[dict(entry.split(':') for entry in line) for line in lines]
return books这个函数首先打开文件,读取所有行,然后使用列表推导式和字典推导式将每一行转换为一个字典。每个字典都包含书籍的属性,例如 ID、Title、Author 等。
接下来,创建一个函数 decrementBookUnits(books, isbn),该函数接收书籍列表和要修改的 ISBN 作为参数。该函数遍历书籍列表,找到 ISBN 匹配的书籍,并将其 ISBN 修改为 '666'。
def decrementBookUnits(books,isbn):
"""
函数 `decrementBookUnits` 接收一个书籍列表和一个 ISBN 号码,并将 ISBN 更新为
ISBN 为给定 ISBN 号码的书籍为 '666'。
:param books: 表示书籍的字典列表。 每个字典都包含有关
一本书,包括其 ISBN
:param isbn: `isbn` 参数是您要减少单位的书籍的 ISBN(国际标准书号)
:return: 在减少具有给定 ISBN 的书籍的单位后,更新的书籍列表。
"""
# 遍历书籍列表
for idx, entry in enumerate(books):
# 检查此条目是否具有我们的 ISBN
if entry['ISBN'] == str(isbn):
# 通过更新
# 实际的 `books` 对象直接使用 idx
books[idx]['ISBN'] = '666'
# 或者实际减少:
#books[idx]['ISBN'] = str(int(books[idx]['ISBN']) - 1)
return books这个函数使用 enumerate() 函数遍历书籍列表,以便同时获取索引和元素。如果找到匹配的 ISBN,则使用索引直接修改 books 列表中的对应元素。
最后,创建一个函数 writeBooks(books, file),该函数接收修改后的书籍列表和要写入的文件名作为参数。该函数将书籍列表转换为文本格式,并将文本写入文件。
def writeBooks(books, file):
"""
函数 `writeBooks` 接收一个书籍列表和一个文件名作为输入,打开该文件,遍历
书籍,并将每本书籍条目以特定格式写入文件。
:param books: “books”参数是字典列表。 每个字典代表一本书,并
包含书籍不同属性的键值对,例如标题、作者、类型等
:param file: `file` 参数是将写入书籍的文件名或路径
"""
# 打开文件,遍历条目,然后写回
with open(file, 'w') as booksFile:
for entry in books:
booksFile.writelines(' -- '.join(['='.join([k,v]) for k,v in entry.items()]) + '\n')这个函数打开文件,然后使用列表推导式和字符串的 join() 方法将每个书籍字典转换为文本格式。最后,将所有文本写入文件。
以下是如何使用这些函数的示例:
# 获取书籍内容作为对象
# 由函数定义
books=getBooks('books.txt')
# 看看是什么样子
print(books)
# 减少 ISBN 为 33 的书籍
books=decrementBookUnits(books,33)
# 将我们的书籍对象写回文件
# 使用一个新文件,以便可以重复运行此操作
writeBooks(books,'books2.txt')这个示例首先调用 getBooks() 函数读取 books.txt 文件,并将书籍列表存储在 books 变量中。然后,调用 decrementBookUnits() 函数修改 ISBN 为 33 的书籍。最后,调用 writeBooks() 函数将修改后的书籍列表写入 books2.txt 文件。
通过将文件操作分解为读取、修改和写入三个独立的函数,我们提供了一种更清晰、更易于维护的解决方案。这种方法不仅解决了原始代码中的问题,还使代码更易于理解和扩展。通过将文件内容转换为易于操作的数据结构,我们可以更轻松地修改数据,并安全地将修改后的数据写回文件。这种方法可以应用于各种文件操作场景,提高代码的可读性和可维护性。
以上就是修改文本文件中特定行的 ISBN:Python 教程的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号