文本文件中带有制表符的定界符

时间:2018-06-28 03:36:06

标签: python python-2.7

想在文本文件中找到定界符。

文字看起来:

ID;    Name
1;     John Mak
2;     David H 
4;     Herry

该文件由带有定界符的标签组成。

我尝试了以下操作:by referring

with open(filename, 'r') as f1:
    dialect = csv.Sniffer().sniff(f1.read(1024), "\t")
    print 'Delimiter:', dialect.delimiter

结果显示:Delimiter:

预期结果:Delimiter: ;

2 个答案:

答案 0 :(得分:2)

sniff只能以一个字符作为定界符结束。由于您的CSV文件包含两个字符作为分隔符,因此sniff将只选择其中一个。但是由于您还将可选的第二个参数传递给sniff,因此它只会选择该值中包含的内容作为可能的分隔符,在您的情况下为'\t'(在您的{ {1}}输出)。

来自sniff's documentation

  

如果给出了可选的 delimiters 参数,则将其解释为   包含可能的有效分隔符的字符串。

答案 1 :(得分:1)

不能保证嗅探正常。

这是一种适用于任何定界符的方法。

首先假设最常见的定界符;失败,然后尝试其他定界符,直到设法解析该行为止。

import csv

with open('sample.csv') as f:
  reader = csv.reader(f, delimiter=';')
  for row in reader:
    try:
      a,b = row
    except ValueError:
      try:
         a,b = row[0].split(None, 1)
      except ValueError:
        a,b = row[0].split('\t', 1)
    print('{} - {}'.format(a.strip(), b.strip()))

如果要尝试使用不同的定界符,可以在this replt.it link上进行操作,并使用sample.csv文件进行操作。

您可以将嗅探与此结合起来,以捕获您不知道的所有奇数分隔符。