想在文本文件中找到定界符。
文字看起来:
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: ;
答案 0 :(得分:2)
sniff
只能以一个字符作为定界符结束。由于您的CSV文件包含两个字符作为分隔符,因此sniff
将只选择其中一个。但是由于您还将可选的第二个参数传递给sniff
,因此它只会选择该值中包含的内容作为可能的分隔符,在您的情况下为'\t'
(在您的{ {1}}输出)。
如果给出了可选的 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
文件进行操作。
您可以将嗅探与此结合起来,以捕获您不知道的所有奇数分隔符。