如何将CSV数据写入Python字典?求更优处理方案
问题解决:CSV数据存入字典并写入新CSV
1. 语法错误的原因与修复
你用testdict.update("sonum": row['Order ID'])报错,是因为update()方法要求传入字典对象,而非直接写键值对语法。有两种简洁的修复方式:
- 方式一:传入字典字面量调用
updatetestdict.update({"sonum": row['Order ID']}) - 方式二:直接给字典键赋值(单个键值对更新时更高效)
testdict['sonum'] = row['Order ID']
2. 适配业务场景的完整代码修改
注意:你当前的testdict是全局变量,循环处理每一行时会覆盖之前的数据。如果要保留所有行的处理结果,应该为每行创建独立字典并存入列表,之后批量写入新CSV。以下是完整修改后的代码:
import csv bccsv = "order.csv" fbcsv = "fbcsv.csv" # 直接复用你定义的目标表头 target_headers = ["Flag","SONum","Status","CustomerName","CustomerContact","BillToName","BillToAddress","BillToCity","BillToState","BillToZip","BillToCountry","ShipToName","ShipToAddress","ShipToCity","ShipToState","ShipToZip","ShipToCountry","ShipToResidential","CarrierName","TaxRateName","PriorityId","PONum","VendorPONum","Date","Salesman","ShippingTerms","PaymentTerms","FOB","Note","QuickBooksClassName","LocationGroupName","OrderDateScheduled","URL","CarrierService","DateExpired","Phone,Email","Category","CF-Credit Key Approval ID","CarrierName","CF-Skynamo Comments"] # 存储所有处理后的订单字典 order_dicts = [] with open(bccsv, newline='') as csvfile: reader = csv.DictReader(csvfile) for row in reader: # 为每行创建独立字典,初始化固定值 order_dict = {"ordertype": "SO", "SONum": row['Order ID']} # 按需映射其他字段 order_dict["CustomerName"] = row['Billing Company'] order_dict["CustomerContact"] = f"{row['Customer Phone']} | {row['Customer Email']}" order_dict["BillToName"] = row['Billing Company'] order_dict["BillToAddress"] = row['Billing Street 1'] order_dict["BillToCity"] = row['Billing Suburb'] order_dict["BillToState"] = row['Billing State'] order_dict["BillToZip"] = row['Billing Zip'] order_dict["BillToCountry"] = row['Billing Country'] order_dict["Salesman"] = row['Billing koi_rep'] order_dict["LocationGroupName"] = row['Billing Location Group'] # 将当前行字典存入列表 order_dicts.append(order_dict) # 写入处理后的数据到新CSV with open(fbcsv, "w", newline="") as csvfile: # 使用DictWriter按指定表头写入,自动匹配字典键值 writer = csv.DictWriter(csvfile, fieldnames=target_headers) writer.writeheader() writer.writerows(order_dicts)
3. 关键说明
- 使用
DictWriter可以直接按表头映射字典键值,无需手动维护列顺序,完美适配你的系统导入需求。 - 如果需要处理第二行的商品明细表头,可以拆分
Product Details字段的内容,生成对应明细字典后单独追加写入新CSV。 - 循环中为每行创建新字典,避免了全局字典的数据覆盖问题,保证所有行的处理结果都被保留。
内容的提问来源于stack exchange,提问作者Tim
相关产品推荐
相关产品推荐

