def del_book(): book_id = input("请输入要删除的图书编号:") with open('book.csv', 'a', encoding='utf-8', newline='') as f: lines = f.read(f) lines = list(lines)这段哪里错了
时间: 2023-12-28 18:03:24 浏览: 34
这段代码有两个错误:
1. 打开文件时,使用了 `'a'` 模式,这是追加模式,意味着你只能往文件中追加新的内容,而不能对原来的内容进行修改。因此,如果你想删除一条记录,应该使用 `'r+'` 模式来打开文件。
2. 在读入文件之后,你使用了 `list()` 函数来将文件内容转换成了一个列表。但是,文件对象本身就已经是一个可迭代对象,你不需要将它转换成列表,否则会额外占用内存空间。
下面是修改后的代码:
```
def del_book():
book_id = input("请输入要删除的图书编号:")
with open('book.csv', 'r+', encoding='utf-8', newline='') as f:
lines = f.readlines()
f.seek(0) # 将文件指针移动到文件开头
for line in lines:
if book_id in line:
continue
f.write(line)
f.truncate() # 截断文件,删除多余的内容
```
这段代码使用了 `readlines()` 函数来读取文件内容,然后遍历每一行,找到要删除的记录并跳过,将其余记录写回文件中。最后,使用 `truncate()` 函数来截断文件,删除多余的内容。
相关问题
使用Python语言完成图书管理功能的开发,要求该功能至少包括:输出图书管理主菜单、添加图书信息、删除图书信息、修改图书别信息、显示所有图书信息。要求将图书类别存储到book.csv文件中,文件格式如下: 1.定义函数(PrintBookMenu()):输出图书管理主菜单,输出样式如下: 图书管理 1添加图书 2.删除图书 3修改图书 4 显示所有图书 0.退出系统 请输入功能对应的数宇: 1.定义函数(add_book()):添加图书信息,数据存储到文件(book.csv)中,信息添加过程如下图所示: 请输入功能对应的数字:1 请输入图书类别编号:1 请输入图书编号:1 请输入图书名称:Python程产设计 请输入作者:单晁明 请输入出版社:北京理工大学出版社 请输入出版时间:2020-09-18 请输入ISBN号: 13123-43432-212 添加成功 通过图书类别编号,调用booktype2类中的readBookType()方法读取图书类别的名称。2. 定义函数(del_book()):删除图书信息,从文件(book.csv)中删除,删除过程如下图所示: 请输入功能对应的数字
以下是一个示例代码,实现了您提出的图书管理功能:
```python
import csv
class Book:
def __init__(self, book_type, book_id, book_name, author, publisher, publish_date, isbn):
self.book_type = book_type
self.book_id = book_id
self.book_name = book_name
self.author = author
self.publisher = publisher
self.publish_date = publish_date
self.isbn = isbn
class BookType:
def __init__(self):
self.book_types = {}
def read_book_type(self, book_type_id):
return self.book_types[book_type_id]
def print_book_menu():
print("图书管理")
print("1.添加图书")
print("2.删除图书")
print("3.修改图书")
print("4.显示所有图书")
print("0.退出系统")
choice = input("请输入功能对应的数字:")
return choice
def add_book():
book_type_id = input("请输入图书类别编号:")
book_id = input("请输入图书编号:")
book_name = input("请输入图书名称:")
author = input("请输入作者:")
publisher = input("请输入出版社:")
publish_date = input("请输入出版时间:")
isbn = input("请输入ISBN号:")
book = Book(book_type_id, book_id, book_name, author, publisher, publish_date, isbn)
with open('book.csv', mode='a', newline='') as file:
writer = csv.writer(file)
writer.writerow([book.book_type, book.book_id, book.book_name, book.author, book.publisher, book.publish_date, book.isbn])
book_type = BookType().read_book_type(book_type_id)
print("添加成功")
def del_book():
book_id = input("请输入要删除的图书编号:")
with open('book.csv', mode='r') as file:
reader = csv.reader(file)
rows = list(reader)
with open('book.csv', mode='w', newline='') as file:
writer = csv.writer(file)
for row in rows:
if row[1] != book_id:
writer.writerow(row)
print("删除成功")
def modify_book():
pass
def show_all_books():
with open('book.csv', mode='r') as file:
reader = csv.reader(file)
for row in reader:
print(row)
book_type = BookType()
book_type.book_types = {
'1': '计算机科学',
'2': '文学艺术',
'3': '历史地理'
}
while True:
choice = print_book_menu()
if choice == '0':
break
elif choice == '1':
add_book()
elif choice == '2':
del_book()
elif choice == '3':
modify_book()
elif choice == '4':
show_all_books()
else:
print("输入错误,请重新输入!")
```
需要注意的是,以上代码仅为示例,可能还存在一些不足之处,您可以根据实际需求进行修改和完善。
图书信息管理功能用Python语句,并将图书信息存储到book.csv
好的,以下是一个基本的图书信息管理功能的Python代码示例,可以将图书信息存储到book.csv文件中:
```
import csv
# 输出图书信息管理主菜单
def print_menu():
print("欢迎使用图书信息管理系统!")
print("1. 添加图书信息")
print("2. 删除图书信息")
print("3. 修改图书信息")
print("4. 显示所有图书信息")
print("0. 退出系统")
# 添加图书信息
def add_book():
book_list = []
book_name = input("请输入图书名称:")
book_author = input("请输入图书作者:")
book_price = input("请输入图书价格:")
book_dict = {"name": book_name, "author": book_author, "price": book_price}
book_list.append(book_dict)
with open("book.csv", "a", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
for book in book_list:
writer.writerow([book["name"], book["author"], book["price"]])
print("图书信息添加成功!")
# 删除图书信息
def del_book():
book_name = input("请输入要删除的图书名称:")
with open("book.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
book_list = list(reader)
with open("book.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
for book in book_list:
if book[0] != book_name:
writer.writerow(book)
print("图书信息删除成功!")
# 修改图书信息
def modify_book():
book_name = input("请输入要修改的图书名称:")
with open("book.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
book_list = list(reader)
with open("book.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.writer(f)
for book in book_list:
if book[0] == book_name:
book_author = input("请输入修改后的图书作者:")
book_price = input("请输入修改后的图书价格:")
writer.writerow([book_name, book_author, book_price])
print("图书信息修改成功!")
else:
writer.writerow(book)
# 显示所有图书信息
def show_all_book():
with open("book.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
book_list = list(reader)
print("图书名称\t图书作者\t图书价格")
for book in book_list:
print(book[0] + "\t" + book[1] + "\t" + book[2])
# 主函数
def main():
while True:
print_menu()
choice = input("请输入您的选择:")
if choice == "1":
add_book()
elif choice == "2":
del_book()
elif choice == "3":
modify_book()
elif choice == "4":
show_all_book()
elif choice == "0":
print("感谢使用图书信息管理系统,再见!")
break
else:
print("输入有误,请重新输入!")
if __name__ == "__main__":
main()
```
这个程序可以通过运行Python文件来启动,将会输出一个图书信息管理的主菜单。在主菜单中可以选择添加、删除、修改或者显示所有图书信息。每次进行添加、删除、修改操作后,都会将最新的图书信息存储到book.csv文件中。您可以根据需要修改文件名、文件路径或者文件格式等信息。