J'utilise python pour lire un fichier CSV avec les paramètres suivants :

import unicodecsv, ssl    
ctx = ssl._create_unverified_context()
    response = urllib2.urlopen(url, timeout=300, context=ctx)
    data = unicodecsv.reader(response,
                              delimiter=";",
        quotechar="\"",
        doublequote=False,
        quoting=unicodecsv.QUOTE_ALL,
        skipinitialspace=True,
        encoding="utf-8-sig")

Pour cette ligne:

"ID";"Produit";"URL";"Couleur";"Stock"

Il renvoie : "ID", Produit, URL, Couleur, Stock

Donc pour le premier élément de la ligne, il garde le guillemet. J'utilise utf-8-sig car il y a des caractères BOM.

0
Alexandru R 5 févr. 2020 à 12:59

1 réponse

Meilleure réponse

Confirmé comme bogue dans unicodecsv pour Python2 (voir issue 81).

unicodecsv.UnicodeReader ne transmet pas l'encodage au csv.reader sous-jacent, il ne sait donc pas que la nomenclature doit être supprimée, donc le premier champ ne commence pas par le guillemet et ne compte pas comme un champ cité.

Le problème a actuellement 2,5 ans, le projet a été touché pour la dernière fois il y a plus de 4 ans et semble abandonné (par issue 92). Je suggère fortement de vous éloigner de unicodecsv. Si vous devez l'utiliser, lisez vous-même la réponse dans une chaîne, supprimez la nomenclature, puis transmettez le texte nettoyé à unicodecsv via io.StringIO.

1
Amadan 5 févr. 2020 à 12:38