Python - 用另一个文件中的短代码动态替换长字段

如何解决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","可用","家庭自动化"

stockFeedo.csv 示例(由上述脚本生成

“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"

单独代码 csv 文件示例

制造商,代码 能量-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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?