Lecteur Python UTF-16 CSV



Answers

L' exemple de documentation du module csv Python 2.x montre comment gérer les autres encodages.

Question

J'ai un fichier CSV UTF-16 que je dois lire. Le module csv de Python ne semble pas supporter UTF-16.

J'utilise python 2.7.2. Les fichiers CSV que j'ai besoin d'analyser sont d'une taille énorme et s'exécutent en plusieurs Go de données.

Réponses aux questions de John Machin ci-dessous

print repr(open('test.csv', 'rb').read(100))

Sortie avec test.csv ayant juste abc comme contenu

'\xff\xfea\x00b\x00c\x00'

Je pense que le fichier csv a été créé sur Windows machine aux Etats-Unis. J'utilise Mac OSX Lion.

Si j'utilise le code fourni par phihag et test.csv contenant un enregistrement.

Exemple de contenu test.csv utilisé. Ci-dessous est imprimé repr (open ('test.csv', 'rb'). Read (1000)) sortie

'\xff\xfe1\x00,\x002\x00,\x00G\x00,\x00S\x00,\x00H\x00 \x00f\x00\xfc\x00r\x00 \x00e\x00 \x00\x96\x00 \x00m\x00 \x00\x85\x00,\x00,\x00I\x00\r\x00\n\x00'

Code par phihag

import codecs
import csv
with open('test.csv','rb') as f:
      sr = codecs.StreamRecoder(f,codecs.getencoder('utf-8'),codecs.getdecoder('utf-8'),codecs.getreader('utf-16'),codecs.getwriter('utf-16'))      
      for row in csv.reader(sr):
         print row

Sortie du code ci-dessus

['1', '2', 'G', 'S', 'H f\xc3\xbcr e \xc2\x96 m \xc2\x85']
['', '', 'I']

la production attendue est

['1', '2', 'G', 'S', 'H f\xc3\xbcr e \xc2\x96 m \xc2\x85','','I']



Il suffit d'ouvrir votre fichier avec codecs.open comme dans

import codecs, csv

stream = codecs.open(<yourfile.csv>, encoding="utf-16")
reader = csv.reader(stream)

Et travaillez avec votre programme avec des chaînes Unicode, comme vous le feriez de toute façon si vous traitez du texte






Related