2011-07-17 5 views
85

J'essaye d'accéder à un model.filefield dans Django pour analyser un fichier CSV en Python en utilisant le module csv. Il fonctionne sur Windows, mais sur Mac, il m'a donné ceci:Ouvrir le fichier en mode universal-newline en utilisant le module CSV Django

Exception Type: Error 

Exception Value: new-line character seen in unquoted field - do you need to open the file in universal-newline mode? 

Voici le code:

myfile = customerbulk.objects.all()[0].fileup 

mydata = csv.reader(myfile) 
    for email,mobile,name,civilid in mydata: 
     print email,mobile,name,civilid 
+0

quel est ce 'customerbulk. objects.all() [0] .fileup' chose. Est-ce un nom de fichier sur un modèle? – SingleNegationElimination

+0

fileup = models.FileField (verbose_name = "CsvFile", upload_to = 'Fichiers Excel') si je fais une petite requête comme customerbulk.objects.get (pk = 1) – mohd

+1

La raison exacte de l'utilisation de 'rU' (c'est lié à la fonction open() et n'est pas spécifique à csv.): 'En plus du mode standard fopen(), le mode peut être 'U' ou 'rU'. Python est généralement construit avec le support de newlines universel; fournir 'U' ouvre le fichier sous forme de fichier texte, mais les lignes peuvent être terminées par l'un des éléments suivants: la convention de fin de ligne Unix '\ n', la convention Macintosh '\ r' ou la convention Windows '\ r \ n'.' http://docs.python.org/2/library/functions.html#open – zengr

Répondre

145

J'ai finalement trouvé la solution:

mypath = customerbulk.objects.get(pk=1).fileup.path 
o = open(mypath,'rU') 
mydata = csv.reader(o) 
+2

Je crois que vous pouvez simplifier cela. Il semble étrange de chercher au début après avoir simplement ouvert le fichier. Ce qui suit m'a aidé à surmonter le même problème d'une exportation de feuille de calcul Excel vers CSV en utilisant les valeurs par défaut: data = csv.reader (open (FILENAME, 'rU'), quotechar = '"', delimiter = ',') – timbo

+4

Oui, il y a le bit >>> o = open (mypath, 'rU'), avec le drapeau 'rU' est la magie importante qui a fonctionné dans mon cas: – rd108

+13

[PEP278] (http : //www.python.org/dev/peps/pep-0278/) a expliqué ce que signifie 'rU':' Dans un Python avec support de newline universel open() le paramètre mode peut aussi être "U", signifiant " ouvert pour l'entrée en tant que fichier texte avec interprétation de nouvelle ligne universelle "Mode" rU "est également autorisé, pour la symétrie avec" rb ".' – Xiao

Questions connexes