如何将.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
,而不是{
我尝试使用正则表达式从输入文件中的相关列中删除数字(这一行在上面的代码中被注释掉),如下所示:
^{pr2}$但是当遇到X256DATA
这样的字符串时,这会导致问题。在
另一个问题是,当前生成的输出文件在第一列中显示abc;DW1
,在第二列中显示{
我怎样才能解决这些问题?感谢任何帮助。在
输入:
1 abc DW1
2 uz5 XTEXT
电流输出:
1 abc DW1 5
2 uz5 XTEXT 4105
输入:
abc;DW1\n
uz5;XTEXT\n
电流输出:
abc;DW1,5\n
uz5;XTEXT,4105\n
abc;DW1;5\n
uz5;XTEXT;4105\n
好的,下面是一个基于您的代码的解决方案,它适用于您的
.txt
文件的格式:请注意:
有了这个解决方案,我试图解决您的问题,同时保持接近您的原始实现。实现目标的方法有很多种,可能更像Python式的/高效的/干燥的。
由于输入和输出文件的列数不同,格式也不同,因此您最终会希望将代码转换为一个(一组)函数,该函数将不同的内容(要检查的文件类型和列)作为参数。
编辑:
在这个问题上,我发现
dest
中的输出有点混乱。(我之前还没到那么远:))我已经更改了代码,以产生您现在想要的精确输出。在另一个编辑(基于评论中的讨论):
关于将输入文件中的数据类型与已定义的
^{pr2}$data_type
列表相匹配的主题:如果输入文件中的DT
总是在开头或结尾使用您不想考虑的数字,则可以使用或者
移除它们。在
普通字典查找与键完全匹配。如果你得到了多个匹配,你就在做别的事情。在
现在从更新后的问题中我看到您并没有真正寻找完全匹配,因为文件中的
^{pr2}$DW1
应该与Datatype
中的DW
匹配。如果要检查字符串的开头是否匹配,请使用str.startswith
:请注意,您必须在
M
之前检查MDEDATA
,以避免错误匹配。一般来说,先检查较长的匹配项,再检查较短的匹配项。在正如itsjeyd建议的那样
相关问题 更多 >
编程相关推荐