如何动态识别数据文件中的未知分隔符?

新手上路,请多包涵

我有三个输入数据文件。每个对其中包含的数据使用不同的定界符。数据文件一如下所示:

苹果 |香蕉 |橘子 |葡萄

数据文件二如下所示:

 quarter, dime, nickel, 便士

数据文件三如下所示:

马牛猪鸡山羊

(列数的变化也是有意的)

我的想法是计算非字母字符的数量,并假定最高计数是分隔符。但是,具有非空格分隔符的文件在分隔符前后也有空格,因此空格在所有三个文件上都有效。这是我的代码:

 def count_chars(s):
    valid_seps=[' ','|',',',';','\t']
    cnt = {}
    for c in s:
        if c in valid_seps: cnt[c] = cnt.get(c,0) + 1
    return cnt

infile = 'pipe.txt' #or 'comma.txt' or 'space.txt'
records = open(infile,'r').read()
print count_chars(records)

它将打印一个字典,其中包含所有可接受字符的计数。在每种情况下,空格总是获胜,所以我不能依靠它来告诉我分隔符是什么。

但我想不出更好的方法来做到这一点。

有什么建议么?

原文由 Greg Gauthier 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 528
2 个回答

如果您使用的是 python,我建议只在包含所有有效预期分隔符的行上调用 re.split

 >>> l = "big long list of space separated words"
>>> re.split(r'[ ,|;"]+', l)
['big', 'long', 'list', 'of', 'space', 'separated', 'words']

唯一的问题是其中一个文件是否使用分隔符作为数据的一部分。

如果您必须确定分隔符,最好的办法是计算除空格以外的所有内容。如果几乎没有出现,那么它可能是空格,否则,它是映射字符的最大值。

不幸的是,真的没有办法确定。您可能有用逗号填充的空格分隔数据,或者您可能有 |用分号填充的分隔数据。它可能并不总是有效。

原文由 JoshD 发布,翻译遵循 CC BY-SA 2.5 许可协议

如何尝试 Python CSV 的标准: http ://docs.python.org/library/csv.html#csv.Sniffer

 import csv

sniffer = csv.Sniffer()
dialect = sniffer.sniff('quarter, dime, nickel, penny')
print dialect.delimiter
# returns ','

原文由 eumiro 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题