2010-07-28 5 views
1

J'ai un fichier csv comme colonne 120 par 4500 ligne. J'ai lu le champ "nom du client" dans la première colonne, première rangée. Je regarde alors ce champ dans un deuxième dossier de cvs contenant le "nom de client, et l'identification de client" J'écris un nouveau dossier de cvs avec "le nom de client", identification de client ", et tout le reste du 119 colunm. jusqu'à la fin du premier fichier.Comment utiliser csv.reader en python avec le caractère français comme é, à, ç, ê, ë,

Cela fonctionne, mais j'ai un caractère spécial partout dans les deux premiers fichiers csv. et je ne veux pas avoir « Montr \ xe9al-Nord » au lieu de Montréal-Nord ou Val . \ xe9rie Lamarche » au lieu de 'Valérie Lamarche' dans le fichier csv résultant

est un code de test ici exemple:

# -*- coding: utf-8 -*- 


import types 
import wx 
import sys 
import os, os.path 
import win32file 
import shutil 
import string 
import wx.lib.dialogs 
import re 
import EmailAttache 
import StringIO,csv 
import time 
import csv 

outputfile=open(os.path.join(u"c:\\transales","Resultat-second_contact_act.csv"), "wb") 

resultat = csv.writer (outputfile) 

def Writefile (info1, info2): 
    print info1, info2 
    resultat.writerow([ `info1`,`info2` ,`line[1]`,`line[2]`,`line[3]`,`line[4]`,`line[5]`,`line[6]`,`line[7]`,`line[8]`,`line[9]`,`line[10]`,`line[11]`,`line[12]`,`line[13]`,`line[14]`,`line[15]`,`line[16]`,`line[17]` ]) 


data = open(os.path.join(u"c:\\transales","SECONDARY_CONTACTS.CSV"),"rb") 
data2 = open(os.path.join(u"c:\\transales","AccountID+ContactID.csv"),"rb") 

source1 = csv.reader(data) 
source2 = csv.reader(data2) 



for line in source1: 
    name= line[0] 
    data2.seek(0) 
    for line2 in source2: 
     if line[0] == line2[0]:  
      Writefile(line[0],line2[1]) 
      break 

outputfile.close() 

Une aide?

salutations, francois

+0

je modifie juste la ligne def WRITEFILE (info1, Info2): imprimer info1, info2 par def Fichier d'écriture (info1, info2): imprimer info1, info2, 'ligne [1]', 'ligne [2]', 'ligne [3]', 'ligne [4]' ,. .. Et vous savez quoi? le résultat d'impression a le bon caractère, mais toujours pas le resultat.writerow ... – francois

+0

Ma réponse a inclus à tort un superflous '[' et ']' --- voir ma modification. –

Répondre

0

Le problème est dans cette ligne:

resultat.writerow([ `info1`,`info2` ,`line[1]`,`line[2]`,`line[3]`,`line[4]`,`line[5]`,`line[6]`,`line[7]`,`line[8]`,`line[9]`,`line[10]`,`line[11]`,`line[12]`,`line[13]`,`line[14]`,`line[15]`,`line[16]`,`line[17]` ]) 

Envelopper une expression dans « back-tiques » aka « accents graves » est une ancienne et façon de dire désapprouvée repr(expression).

S'il vous plaît considérer les points suivants:

>>> s = "Montréal" 
>>> print s 
Montréal 
>>> print repr(s) 
'Montr\xe9al' 
>>> ord(s[5]) 
233 
>>> hex(233) 
'0xe9' 
>>> s == "Montr\xe9al" 
True 
>>> `s` == repr(s) 
True 

L'infraction (3 façons) la ligne devrait être simplement remplacé par

resultat.writerow([info1, info2] + [line[1:18]]) # WRONG (sorry!) 
resultat.writerow([info1, info2] + line[1:18]) # RIGHT 
+0

qui ne fonctionne pas !! la: ligne [1:18] écris toutes les informations dans une colonne !! et encore mauvais accent – francois

+0

@francois: Fixe; Veuillez réessayer. –

+0

Merci John, vous venez de sauvegarder mes vacances. Avec votre aide, je serai en mesure d'importer tous ces fichiers avant ce soir. salutations francois – francois

3

Bien que je ne suis pas familier avec csv.reader ou écrivain, j'ai eu affaire à la lecture de fichiers utf-8 récemment et peut-être en utilisant le module codecs pourraient vous aider.

Au lieu de,

data = open(..., "wb") 

essayer,

import codecs 

et pour tous vos utf-8 fichiers, utilisation,

data = codecs.open(..., "rb", "utf-8") 

Ce lit automatiquement vos fichiers au format unicode (utf-8) et pourrait les écrire correctement dans votre fichier.

+0

merci, vous avez résolu mon problème avec "caractères étrangers" –

+0

@sheepz: Heureux qu'il vous a aidé - ce n'est certainement pas une solution au problème de l'OP! -) –

Questions connexes