Lidando com dados de texto delimitados desconhecidos em Python

O módulo CSV já existe no Python há algum tempo. Uma das joias escondidas nele é a classe Sniffer , que tentará determinar quais são suas regras de cotação e qual delimitador está sendo usado. Muito bom para importar dados de fontes desconhecidas.

A documentação que sugere usá-lo assim:

with open('example.csv', 'rb') as csvfile:
dialect
= csv.Sniffer().sniff(csvfile.read(1024))
csvfile
.seek(0)
reader
= csv.reader(csvfile, dialect)
# ... process CSV file contents here ...

Descobri que isso é um pouco sujeito a erros e falha com mais frequência do que deveria. E o que dá errado, ao que parece, é o truncamento arbitrário no caractere 1024. Uma solução mais eficaz que encontrei é apenas fornecer algumas linhas:

with open('example.csv', 'rb') as csvfile:
sample_text
= ''.join(csvfile.readline()
for x in xrange(3))
dialect
= csv.Sniffer().sniff(sample_text)
csvfile
.seek(0)
reader
= csv.reader(csvfile, dialect)
# ... process CSV file contents here ...

Em seguida, passa de 85% bom para 95% bom.