Python中CSV指定列追加及库存管理程序添货功能问题求解
嘿,我来帮你搞定这个CSV列追加和库存添加的问题!你已经实现了库存查看功能,接下来我们一步步解决添加库存时的CSV操作难题~
解决方案:分两种场景处理
你提到了“追加指定列”和“添加库存”两个需求,我分别给你梳理清楚对应的实现方式:
场景1:给现有CSV文件新增一列(比如添加入库时间、批次字段)
如果是要给已有的库存CSV追加一个新列(比如原来只有商品名、库存、单位,现在要加“入库时间”),用Python标准库csv就能轻松实现:
import csv from datetime import datetime def add_new_inventory_column(csv_file_path, new_column_name, default_val=None): # 1. 读取原CSV的所有数据 inventory_rows = [] with open(csv_file_path, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) # 获取原有表头,添加新列名 updated_headers = reader.fieldnames.copy() updated_headers.append(new_column_name) # 给每一行数据补充新列的值 for row in reader: row[new_column_name] = default_val or datetime.now().strftime('%Y-%m-%d %H:%M:%S') inventory_rows.append(row) # 2. 将更新后的数据写回CSV with open(csv_file_path, 'w', encoding='utf-8', newline='') as f: writer = csv.DictWriter(f, fieldnames=updated_headers) writer.writeheader() writer.writerows(inventory_rows) # 调用示例:给inventory.csv添加"入库时间"列,默认值为当前时间 add_new_inventory_column('inventory.csv', '入库时间')
场景2:用户添加库存时更新现有商品数量/追加新商品
这是库存管理中更常用的操作:用户添加库存时,要么给已有商品增加库存数,要么新增一个商品条目。用csv模块的实现代码如下:
import csv def add_stock_to_inventory(csv_file_path, item_name, add_quantity): updated_rows = [] item_exists = False # 读取原库存数据并更新 with open(csv_file_path, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) headers = reader.fieldnames for row in reader: if row['商品名称'] == item_name: # 转换为整数后增加库存 row['当前库存'] = str(int(row['当前库存']) + add_quantity) item_exists = True updated_rows.append(row) # 如果商品不存在,追加新的库存条目 if not item_exists: new_item = {header: '' for header in headers} new_item['商品名称'] = item_name new_item['当前库存'] = str(add_quantity) new_item['单位'] = input(f"请输入{item_name}的单位:") updated_rows.append(new_item) # 写回更新后的库存数据 with open(csv_file_path, 'w', encoding='utf-8', newline='') as f: writer = csv.DictWriter(f, fieldnames=headers) writer.writeheader() writer.writerows(updated_rows) # 调用示例:给"笔记本"添加20本库存 add_stock_to_inventory('inventory.csv', '笔记本', 20)
用Pandas简化操作(可选)
如果你愿意用第三方库,Pandas会让CSV处理更简洁,代码量大幅减少,适合快速开发小型程序:
新增列示例:
import pandas as pd from datetime import datetime df = pd.read_csv('inventory.csv') df['入库时间'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S') df.to_csv('inventory.csv', index=False, encoding='utf-8')
添加库存示例:
import pandas as pd def add_stock_with_pandas(csv_file_path, item_name, add_quantity): df = pd.read_csv(csv_file_path) if item_name in df['商品名称'].values: # 更新已有商品库存 df.loc[df['商品名称'] == item_name, '当前库存'] += add_quantity else: # 追加新商品 new_item = pd.DataFrame({ '商品名称': [item_name], '当前库存': [add_quantity], '单位': [input(f"请输入{item_name}的单位:")] }) df = pd.concat([df, new_item], ignore_index=True) df.to_csv(csv_file_path, index=False, encoding='utf-8') add_stock_with_pandas('inventory.csv', '钢笔', 15)
注意事项
- 操作前记得备份原CSV文件,避免误操作导致数据丢失
- 读写时统一用
utf-8编码,防止中文乱码问题 - 库存数量一定要做类型转换(转成整数/浮点数),不要直接用字符串拼接
- 如果是多用户使用的程序,可能需要考虑文件锁定,但小型单用户程序暂时不需要额外处理
内容的提问来源于stack exchange,提问作者user9294568




