在做学校的一个任务,大致要求如下:请补全代码用python语言编写一个程序,此程序具有以下功能:
(1)数据输入及存储,从文件中导入初始数据到系统,系统将每次处理后的数据再存入文件
(2) 数据的基本操作(增删改查),现有数据的查询、修改、删除,新增数据项
(3) 数据的统计分析,对商品编号进行排序
(4) 数据处理结果的展示,针对统计分析、基本处理(如怎加一个商品,减少一个商品,或查看某个文件内已有的商品数据)的结果进行展示
写出代码后发现代码无法读取文件,实在不清楚原因,请求解答
class Goods:
def __init__(self, id, name, brand, purchase_price, selling_price, stock):
self.id = id
self.name = name
self.brand = brand
self.purchase_price = purchase_price
self.selling_price = selling_price
self.stock = stock
def __str__(self):
return f'{self.id}\t{self.name}\t{self.brand}\t{self.purchase_price}\t{self.selling_price}\t{self.stock}'
class GoodsManager:
def __init__(self, filename):
self.filename = filename
self.goods_list = []
self.load()
def load(self):
try:
with open(self.filename, 'r') as f:
for line in f:
id, name, brand, purchase_price, selling_price, stock = line.strip().split('\t')
goods = Goods(int(id), name, brand, float(purchase_price), float(selling_price), int(stock))
self.goods_list.append(goods)
except FileNotFoundError:
pass
def save(self):
with open(self.filename, 'w') as f:
for goods in self.goods_list:
f.write(str(goods) + '\n')
def add(self, goods):
self.goods_list.append(goods)
self.save()
def delete(self, id):
self.goods_list = [goods for goods in self.goods_list if goods.id != id]
self.save()
def update(self, id, name, brand, purchase_price, selling_price, stock):
for goods in self.goods_list:
if goods.id == id:
goods.name = name
goods.brand = brand
goods.purchase_price = purchase_price
goods.selling_price = selling_price
goods.stock = stock
break
self.save()
def query(self, id=None, name=None, brand=None):
if id is not None:
return [goods for goods in self.goods_list if goods.id == id]
elif name is not None:
return [goods for goods in self.goods_list if goods.name == name]
elif brand is not None:
return [goods for goods in self.goods_list if goods.brand == brand]
else:
return self.goods_list
def sort(self):
self.goods_list.sort(key=lambda goods: goods.id)
if __name__ == '__main__':
manager = GoodsManager('goods.txt')
while True:
print('请选择操作:')
print('1. 查询商品信息')
print('2. 添加商品信息')
print('3. 修改商品信息')
print('4. 删除商品信息')
print('5. 商品编号排序')
print('6. 退出程序')
choice = input()
if choice == '1':
print('请选择查询方式:')
print('1. 按商品编号查询')
print('2. 按商品名称查询')
print('3. 按商品品牌查询')
sub_choice = input()
if sub_choice == '1':
id = int(input('请输入商品编号:'))
goods_list = manager.query(id=id)
elif sub_choice == '2':
name = input('请输入商品名称:')
goods_list = manager.query(name=name)
elif sub_choice == '3':
brand = input('请输入商品品牌:')
goods_list = manager.query(brand=brand)
else:
goods_list = manager.query()
if len(goods_list) == 0:
print('没有找到相关商品信息')
else:
for goods in goods_list:
print(goods)
elif choice == '2':
id = int(input('请输入商品编号:'))
name = input('请输入商品名称:')
brand = input('请输入商品品牌:')
purchase_price = float(input('请输入进货价格:'))
selling_price = float(input('请输入销售价格:'))
stock = int(input('请输入库存数量:'))
goods = Goods(id, name, brand, purchase_price, selling_price, stock)
manager.add(goods)
print('添加成功')
elif choice == '3':
id = int(input('请输入要修改的商品编号:'))
goods_list = manager.query(id=id)
if len(goods_list) == 0:
print('没有找到相关商品信息')
else:
goods = goods_list[0]
name = input(f'请输入新的商品名称({goods.name}):')
brand = input(f'请输入新的商品品牌({goods.brand}):')
purchase_price = input(f'请输入新的进货价格({goods.purchase_price}):')
selling_price = input(f'请输入新的销售价格({goods.selling_price}):')
stock = input(f'请输入新的库存数量({goods.stock}):')
if name == '':
name = goods.name
if brand == '':
brand = goods.brand
if purchase_price == '':
purchase_price = goods.purchase_price
else:
purchase_price = float(purchase_price)
if selling_price == '':
selling_price = goods.selling_price
else:
selling_price = float(selling_price)
if stock == '':
stock = goods.stock
else:
stock = int(stock)
manager.update(id, name, brand, purchase_price, selling_price, stock)
print('修改成功')
elif choice == '4':
id = int(input('请输入要删除的商品编号:'))
manager.delete(id)
print('删除成功')
elif choice == '5':
manager.sort()
print('排序成功')
elif choice == '6':
break
else:
print('输入有误,请重新输入')
一运行就会出现not enough values to unpack (expected 6, got 5)
id, name, brand, purchase_price, selling_price, stock = line.strip().split('\t')
目测是这里错了,你的文件中数据不完全,只有5列,然后用了6个变量,就会出这个错
把你的文件贴一下
商品编号 名称 品牌 进货价格 销售价格 库存数量
1 华为 nova9 1500 2000 6
回答: 该错误通常表示期望了6个变量,但实际上只提供了5个变量,可能是由于数据文件格式错误,数据行数不足等原因。
以下是解决此问题的步骤: 1.检查数据文件格式是否与程序期望的格式一致。 2.检查数据文件中的最后一行,确保这一行不是空行。 3.检查数据文件中是否存在缺失值,如果有,需要使用相应的方法进行填充或处理。 4.检查代码中是否存在错误,例如读取文件行数是否有误等。 5.尝试使用Python中的调试器或打印语句来追踪错误。 6.如有必要,可以尝试更新Python程序或库的版本,以解决任何已知的问题和错误。
以下是示例代码(假设错误出现在文件读取部分):
import csv
with open('data.csv', 'r') as f:
reader = csv.reader(f)
header = next(reader) # 读取第一行作为表头
data = []
for row in reader:
if len(row) == 6: # 仅存储正确长度的数据行
data.append(row)
else:
print(f"Invalid data row: {row}") # 打印不合规格式的数据行
请注意以上代码仅用作示例。在处理不同的数据文件和错误类型时可能需要进行适当的修改。