我有一个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)
stockfeed.csv 示例
MPN,显示名称/代码,UPC代码,价格,品牌,库存箱可用,可用,库存类别"SHA5209"ENER-J户外双PIR泛光灯黑色"7103356056844"60.00〃"Ener-J"0""未知"家庭自动化";"BW1001"ENER-J即热水龙头"7103351516954"60.00〃"Ener-J"0""未知"家庭自动化";"Y28EU"Kami Mini固定式室内摄像机EU"6970171176443"34.37〃"Kami"0""未知""视频捕获";"ENER010"Energenie-4 Gang RF Extension"5060166030117"21.24〃"Energenie"37〃"可用"Energenie";"SHA5204""Smart WiFi 1 Gang Touch Switch"7061252103720"11.00"Ener-J"0""未知"家庭自动化";"CostcoPOS9〃"环形报警托盘POS"00000000000108"&";。00〃"环"0""未知""环";"CostcoPOS10〃"Ring Stick Up Cam Battery White Duo-Pack Pallet POS"00000000000109"&";。00〃"环"0""未知""环";"L83〃"Lightwave Smart Relay(3 Gang)"5060252202862"99.13〃"Lightwave"63〃"可用"家庭自动化";"AIRTCH"Airthings Corentium Home"7090031102227"92.75〃"Airthings"47〃"可用"家庭自动化";"MIHO099"Mi Home-带网关的智能恒温器"5060166038557"92.08〃"Energenie"1〃"可用"Energenie";"L2"Lightwave Link Plus"5060252202558"92.05〃"Lightwave"26〃"可用"家庭自动化";
stockfeedo.csv示例(由上述脚本生成)
"MPN"显示名称/代码"UPC码"价格"品牌"Bin On Hand Available""可用""库存类别"SKU";"SHA5209"ENER-J户外双PIR泛光灯黑色"7103356056844"60.00〃"Ener-J"0""未知""家庭自动化"TD-Ener-J-SHA5209";"BW1001"ENER-J即热水龙头"7103351516954"60.00〃"Ener-J"0""未知""家庭自动化"TD-Ener-J-BW1001";"Y28EU"Kami Mini固定式室内摄像机EU"6970171176443"34.37〃"Kami"0""未知""视频捕获"TD-Kami-Y28 EU";"ENER010"Energenie-4 Gang RF Extension"5060166030117"21.24〃"Energenie"37〃"可用"Energenie"TD-Energenie-ENER010";"SHA5204""Smart WiFi 1 Gang Touch Switch"7061252103720"11.00"Ener-J"0""未知""家庭自动化"TD-Ener-J-SHA5204";"CostcoPOS9〃"环形报警托盘POS"00000000000108"&";。00〃"环"0""未知""环"TD-RING-CostcoPOS9";"CostcoPOS10〃"Ring Stick Up Cam Battery White Duo-Pack Pallet POS"00000000000109"&";。00〃"环"0""未知""环"TD-RING-CostcoPOS10";"L83〃"Lightwave Smart Relay(3 Gang)"5060252202862"99.13〃"Lightwave"63〃"可用""家庭自动化"TD-Lightwave-L83";"AIRTCH"Airthings Corentium Home"7090031102227"92.75〃"Airthings"47〃"可用""家庭自动化"TD Airthings AIRTCH";"MIHO099"Mi Home-带网关的智能恒温器"5060166038557"92.08〃"Energenie"1〃"可用"Energenie"TD-Energenie-MIHO099";"L2"Lightwave Link Plus"5060252202558"92.05〃"Lightwave"26〃"可用""家庭自动化"TD-Lightwave-L2";
单独代码csv文件示例
制造商,代码Ener-J,EJ卡米,KMEnergenie,EG环,RG光波,LWAirthings,ATLIFX,LF
我希望stockfeedo.csv成为的示例
"MPN"显示名称/代码"UPC码"价格"品牌"Bin On Hand Available""可用""库存类别"SKU";"SHA5209"ENER-J户外双PIR泛光灯黑色"7103356056844"60.00〃"Ener-J"0""未知""家庭自动化"TD-EJ-SHA5209";"BW1001"ENER-J即热水龙头"7103351516954"60.00〃"Ener-J"0""未知""家庭自动化"TD-EJ-BW1001";"Y28EU"Kami Mini固定式室内摄像机EU"6970171176443"34.37〃"Kami"0""未知""视频捕获"TD-KM-Y28 EU";"ENER010"Energenie-4 Gang RF Extension"5060166030117"21.24〃"Energenie"37〃"可用"Energenie"TD-EJ-ENER010";"SHA5204""Smart WiFi 1 Gang Touch Switch"7061252103720"11.00"Ener-J"0""未知""家庭自动化"TD-EJ-SHA5204";"CostcoPOS9〃"环形报警托盘POS"00000000000108"&";。00〃"环"0""未知""环"TD-RG-CostcoPOS9";"CostcoPOS10〃"Ring Stick Up Cam Battery White Duo-Pack Pallet POS"00000000000109"&";。00〃"环"0""未知""环"TD-RG-CostcoPOS10";"L83〃"Lightwave Smart Relay(3 Gang)"5060252202862"99.13〃"Lightwave"63〃"可用""家庭自动化"TD-LW-L83";"AIRTCH"Airthings Corentium Home"7090031102227"92.75〃"Airthings"47〃"可用""家庭自动化"TD-AT-AIRTCH";"MIHO099"Mi Home-带网关的智能恒温器"5060166038557"92.08〃"Energenie"1〃"可用"EJ"TD-Energenie-MIHO099";"L2"Lightwave Link Plus"5060252202558"92.05〃"Lightwave"26〃"可用""家庭自动化"TD-LW-L2";
最快的方法是将主数据文件读取到Pandas DataFrame中,将引用文件读取到字典中,并在DataFrame的Manufacturer列上调用.replace()
方法,将dict作为参数传递。这将在列中查找dict的键,并将其替换为dict中的相应值。如果两个文件中都有匹配的项目,即在库存列表中,您有制造商的名称,并且相同的名称出现在参考文件中的某个位置,则此操作有效。