web-dev-qa-db-fra.com

Fractionner la chaîne sur des virgules mais ignorer les virgules entre guillemets?

J'ai une entrée qui ressemble à ceci:

A,B,C,"D12121",E,F,G,H,"I9,I8",J,K

Les valeurs séparées par des virgules peuvent être dans n'importe quel ordre. Je voudrais diviser la chaîne sur des virgules; cependant, dans le cas où quelque chose se trouve entre guillemets doubles, j'en ai besoin pour ignorer les virgules et supprimer les guillemets (si possible). Donc, fondamentalement, la sortie serait cette liste de chaînes:

['A', 'B', 'C', 'D12121', 'E', 'F', 'G', 'H', 'I9,I8', 'J', 'K']

J'ai jeté un coup d'œil à d'autres réponses, et je pense qu'une expression régulière serait la meilleure, mais je suis horrible à les trouver.

42

Lasse a raison; c'est un fichier de valeurs séparées par des virgules, vous devez donc utiliser le module csv . Un bref exemple:

from csv import reader

# test
infile = ['A,B,C,"D12121",E,F,G,H,"I9,I8",J,K']
# real is probably like
# infile = open('filename', 'r')
# or use 'with open(...) as infile:' and indent the rest

for line in reader(infile):
    print line
# for the test input, prints
# ['A', 'B', 'C', 'D12121', 'E', 'F', 'G', 'H', 'I9,I8', 'J', 'K']
61
agf