【发布时间】:2014-03-19 14:12:54
【问题描述】:
如何将.csv 文件中的列中的字符串与定义的数据类型列表进行匹配?
数据类型列表为:
Datatype = ["M", "B", "E", "A", "DF", "DW", "DL", "DT", "XTEXT", "MDEDATA"]
我想使用与列匹配的数据类型在字典中查找值。
什么有效
当我的代码在输入中找到类似DW1 的内容时(请参阅下面的示例),它会将DW:5 写入输出文件,当它找到DT34 时,它会写入DT:7。这很好用。
什么不起作用
但问题是,每当我的代码遇到XTEXT 时,它首先将其匹配到E: 2(因为E 存在于XTEXT 中)然后然后 匹配到XTEXT: 4105下一行。结果,输出文件中的对应行包含2 而不是4105。 MDEDATA 也发生了类似的事情,解析为 A:3。
我尝试使用正则表达式从输入文件的相关列中删除数字(此行在上面的代码中被注释掉),如下所示:
if (Datatype[n] == re.sub('[1234567890\n]', '', line.split(";")[1])):
# ...
但这会在遇到像X256DATA 这样的字符串时导致问题。
另一个问题是当前生成的输出文件在第一列中显示abc;DW1,在第二列中显示5,但我希望在第一列中显示abc,在第二列中显示DW1,在第二列中显示@第三栏987654342@!
我该如何解决这些问题?任何帮助表示赞赏。
CSV 示例
输入:
1 abc DW1
2 uz5 XTEXT
当前输出:
1 abc DW1 5
2 uz5 XTEXT 4105
TXT 示例
输入:
abc;DW1\n
uz5;XTEXT\n
当前输出:
abc;DW1,5\n
uz5;XTEXT,4105\n
期望的输出
abc;DW1;5\n
uz5;XTEXT;4105\n
【问题讨论】:
-
不确定我是否完全理解您要执行的操作。您能否提供一些示例输入(即您正在解析的 CSV 文件的摘录)以及您用于将其转换为
dict1/dict2的代码? -
如何查询字典?
-
@vinu 感谢您添加代码。但是示例输入数据呢?如果你能提供一条线就太好了……
-
@vinu 太棒了!现在只需在输出文件中添加您希望这两行看起来像的内容。我知道您在文本中描述它,但是看到输入和 desired 输出彼此相邻将使我们更接近找到解决方案。 (我要求这样做的另一个原因是我觉得您的代码可能会大大缩短,并且仍然可以做您想做的事情。)
-
@vinu 好的,我现在会尝试在答案中解决这个问题。
标签: python string csv string-matching export-to-csv