542 votes

Existe-t-il un moyen d'inclure des virgules dans des colonnes CSV sans casser le formatage ?

J'ai un CSV à deux colonnes avec un nom et un numéro. Certains noms de personnes utilisent des virgules, par exemple Joe Blow, CFA. Cette virgule rompt le format CSV, puisqu'elle est interprétée comme une nouvelle colonne.

Je me suis renseigné et la prescription la plus courante semble être de remplacer ce caractère, ou de remplacer le délimiteur, par une nouvelle valeur (par ex. this|that|the, other ).

J'aimerais vraiment conserver le séparateur à virgule (je sais qu'Excel prend en charge d'autres délimiteurs, mais d'autres interprètes peuvent ne pas le faire). J'aimerais également conserver la virgule dans le nom, comme suit Joe Blow| CFA a l'air assez ridicule.

Existe-t-il un moyen d'inclure des virgules dans des colonnes CSV sans rompre le formatage, par exemple en les échappant ?

12voto

hlongmore Points 728

En plus des points mentionnés dans les autres réponses : une chose à noter si vous utilisez des guillemets dans Excel est l'emplacement de vos espaces. Si vous avez une ligne de code comme celle-ci :

print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)

Excel traitera le guillemet initial comme un guillemet littéral au lieu de l'utiliser pour échapper aux virgules. Votre code devra être modifié pour devenir

print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)

C'est cette subtilité qui m'a amené ici.

8voto

krishna Points 957

Vous pouvez utiliser des littéraux de modèle (chaînes de modèle)

Par exemple -

`"${item}"`

7voto

Mohammed Ahmed Points 86

Les fichiers CSV peuvent être formatés en utilisant différents délimiteurs, la virgule étant la valeur par défaut.

Vous pouvez utiliser le sep pour spécifier le délimiteur que vous souhaitez pour votre fichier CSV.

Il suffit d'ajouter la ligne sep=; comme toute première ligne de votre fichier CSV, c'est-à-dire si vous voulez que votre délimiteur soit un point-virgule. Vous pouvez le remplacer par n'importe quel autre caractère.

Example

5voto

RasTheDestroyer Points 1030

Ce n'est pas une solution parfaite, mais vous pouvez remplacer toutes les virgules par des ou un devis moins élevé. Il ressemble beaucoup à une virgule et remplit visuellement la même fonction. Aucun guillemet n'est nécessaire

en JS, ce serait

stringVal.replaceAll(',', '‚')

Vous devrez cependant être très prudent dans les cas où vous devrez comparer directement ces données

4voto

amiksch Points 72

En fonction de votre langue, une méthode to_json peut être disponible. Cette méthode permet d'éviter de nombreux problèmes liés aux CSV.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X