You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

火山引擎 最新活动