je crains que vous ne pouvez pas identifier le delimiter sans savoir ce qu'il est. Le problème avec CSV est que, quoting ESR:
la version Microsoft du CSV est un exemple de manuel de comment ne pas concevoir un format de fichier texte.
Le délimiteur doit être échappé d'une manière ou d'une autre s'il peut apparaître dans des champs. Sans savoir, comment l'échappement est fait, l'identifier automatiquement est difficile. Echapper pourrait être fait de la manière UNIX, en utilisant une barre oblique inverse '\', ou la méthode Microsoft, en utilisant des guillemets qui doivent ensuite être échappés aussi. Ce n'est pas une tâche banale.
Donc, ma suggestion est d'obtenir une documentation complète de celui qui génère le fichier que vous voulez convertir. Ensuite, vous pouvez utiliser l'une des approches suggérées dans les autres réponses ou une variante.
Edit:
Python fournit csv.Sniffer qui peut vous aider à en déduire le format de votre DSV. Si votre entrée ressemble à ceci (notez le delimiter cité dans le premier champ de la deuxième rangée):
a|b|c
"a|b"|c|d
foo|"bar|baz"|qux
Vous pouvez faire ceci:
import csv
csvfile = open("csvfile.csv")
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.DictReader(csvfile, dialect=dialect)
for row in reader:
print row,
# => {'a': 'a|b', 'c': 'd', 'b': 'c'} {'a': 'foo', 'c': 'qux', 'b': 'bar|baz'}
# write records using other dialect
http://docs.python.org/library/csv.html#examples – tonfa
Pour obtenir une réponse raisonnable , vous devez spécifier comment l'auteur est en train de citer ou d'échapper le délimiteur (le cas échéant), et comment la citation ou le caractère échappé lui-même est cité ou échappé (le cas échéant). –