如何解决Python - 用另一个文件中的短代码动态替换长字段
我有一个 csv 股票清单文件,我全天定期收到该文件,其中包含每个项目的多个字段。这些字段包括制造商产品编号 (MPN)、制造商完整名称以及最新库存数量等详细信息。我还有一个单独的文件,它存储在不同的文件夹中,我在其中保存了每个制造商的记录和我分配给他们的短代码(2 个字符)(AT 代表 Airthings,RG 代表 Ring 等)。>
我拼凑了下面的工作脚本(通过浏览这些论坛),它采用原始库存文件并创建一个新文件,该文件将一个新字段附加到每个记录 - 目前代表一些固定文本(“ST-”)的串联) 加上制造商全名(csv 的第 5 列)加上一些更固定的文本(“-”)加上 MPN(csv 的第 1 列)。
不过,我想将此字符串中的制造商全名替换为我在单独文件中与制造商关联的两个字符代码。这可能吗?我怎样才能修改下面的脚本来做到这一点?
非常感谢。
S
import csv
with open('C:/Stores/stockFeed/StockFeedi.csv','r') as csvinput:
with open('C:/Stores/stockFeed/StockFeedo.csv','w') as csvoutput:
writer = csv.writer(csvoutput,quoting=csv.QUOTE_NONNUMERIC,lineterminator='\n')
reader = csv.reader(csvinput)
all = []
row = next(reader)
row.append('SKU')
all.append(row)
for row in reader:
row.append("ST-" + row[4] + "-" + row[0]) #This is the line I need help with
all.append(row)
writer.writerows(all)
stockFeedi.csv 示例
MPN、显示名称/代码、UPC 代码、价格、品牌、现有 Bin 可用、可用、库存类别 "SHA5209","ENER-J OUTDOOR TWIN PIR FLOODLIGHT BLACK","7103356056844","60.00","Ener-J","0","UnkNown","Home Automation" "BW1001","ENER-J 即时热水龙头","7103351516954","未知","家庭自动化" "Y28 EU","Kami Mini 固定室内摄像机 EU","6970171176443","34.37","Kami","Video Capture" "ENER010","Energenie - 4 Gang RF Extension","5060166030117","21.24","Energenie","37","Available","Energenie" "SHA5204"、"智能 WiFi 1 组触摸开关"、"7061252103720"、"11.00"、"Ener-J"、"0"、"未知"、"家庭自动化" "CostcopOS9","Ring Alarm Pallet POS","0000000000108",".00","RING","RING" "CostcopOS10","Ring Stick Up Cam Battery White Duo Pack Pallet POS","0000000000109","RING" "L83","Lightwave Smart Relay (3 Gang)","5060252202862","99.13","Lightwave","63","Home Automation" "AIRTCH"、"Airthings Corentium Home"、"7090031102227"、"92.75"、"Airthings"、"47"、"可用"、"家庭自动化" "MIHO099","Mi Home - 带网关的智能恒温器","5060166038557","92.08","1","Energenie" "L2","Lightwave Link Plus","5060252202558","92.05","26","可用","家庭自动化"
“MPN”、“显示名称/代码”、“UPC 代码”、“价格”、“品牌”、“Bin On Hand Available”、“Available”、“Stock Category”、“SKU” "SHA5209","Home Automation","TD-Ener-J-SHA5209 ” "BW1001","家庭自动化","TD-Ener-J-BW1001" "Y28 EU","Kami Mini Fixed Indoor Camera EU","Video Capture","TD-Kami-Y28 EU" "ENER010","TD-Energenie-ENER010" "SHA5204"、"智能 WiFi 1 组触摸开关"、"7061252103720"、"11.00"、"Ener-J"、"0"、"未知"、"家庭自动化"、"TD-Ener-J-SHA5204" "CostcopOS9","TD-RING-CostcopOS9" "CostcopOS10","TD-RING-CostcopOS10" "L83","TD-Lightwave-L83" "AIRTCH","Airthings Corentium Home","7090031102227","92.75","Airthings","47","TD-Airthings-AIRTCH" "MIHO099","米家-带网关的智能恒温器","TD-Energenie-MIHO099" "L2","TD-Lightwave-L2"
制造商,代码 能量-J,EJ 卡米,公里 能源,EG 环,RG 光波,LW 航空用品,AT LIFX,LF
我希望 stockFeedo.csv 的示例
“MPN”、“显示名称/代码”、“UPC 代码”、“价格”、“品牌”、“Bin On Hand Available”、“Available”、“Stock Category”、“SKU” "SHA5209","TD-EJ-SHA5209" "BW1001","TD-EJ-BW1001" "Y28 EU","TD-KM-Y28 EU" "ENER010","TD-EJ-ENER010" "SHA5204"、"智能 WiFi 1 组触摸开关"、"7061252103720"、"11.00"、"Ener-J"、"0"、"未知"、"家庭自动化"、"TD-EJ-SHA5204" "CostcopOS9","TD-RG-CostcopOS9" "CostcopOS10","TD-RG-CostcopOS10" "L83","TD-LW-L83" "AIRTCH","TD-AT-AIRTCH" "MIHO099","EJ","TD-LW-L2"
解决方法
最快的方法是将主数据文件读入 Pandas DataFrame,将参考文件读入字典,然后调用 DataFrame 的制造商列上的 .replace()
方法,将 dict 作为参数传递.这将在列中查找 dict 的键,并将它们替换为 dict 中的相应值。这项工作允许在两个文件中都有匹配的项目,即在库存列表中您有制造商的名称,并且相同的名称出现在参考文件中的某处。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。