2010-07-28 20 views
1

我有一個csv文件,像120列4500行。 我在第一列第一行閱讀了「客戶名稱」字段。 然後,我在包含「客戶名稱和客戶ID」的第二個cvs文件中查找此字段 我編寫了一個新的具有「客戶名稱」,客戶ID「的cvs文件,以及119個colunm.and的所有其餘部分,並繼續直到如何在python中使用csv.reader和é,à,ç,ê,ë,

第一個文件的末尾。這是工作,但我的前兩個CSV文件到處有特殊字符。 ,我不希望有「蒙特婁\ xe9al - 北」,而不是蒙特利爾北部 或「瓦爾中產生的CSV文件\ xe9rie拉馬什」而不是‘瓦萊麗拉馬什’

這裏是一個測試代碼爲例:

# -*- 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() 

任何幫助?

問候,弗朗索瓦

+0

簡單地更換我只是修改行 高清的WriteFile(INFO1,INFO2): 打印info1,info2 by def Writefile(info1,info2): print info1,info2,'line [1]','line [2]','line [3]','line [4]',. .. 你知道嗎?打印結果具有良好的性格,但仍然不是結果。..寫作... – francois 2010-07-29 16:48:46

+0

我的答案錯誤地包含了一個超快的'['和']'---看我的編輯。 – 2010-07-29 21:00:06

回答

0

的問題是在這條線:

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]` ]) 

結束語在「反單引號」表達又名「重音符」是說repr(expression)的老式和過時的方式。

請考慮以下幾點:

>>> 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 

的違規(3種方式)線應該由

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

這是行不通的! the:line [1:18]將所有信息寫入一列!仍然錯口音 – francois 2010-07-29 12:59:14

+0

@francois:固定;請再試一次。 – 2010-07-29 19:34:27

+0

謝謝你,約翰,你只是節省了我的假期。隨着你的幫助,我將能夠在今晚之前導入所有這些文件。 關於 francois – francois 2010-07-30 13:16:01

3

雖然我不熟悉csv.reader或作家,我一直在最近,也許處理UTF-8文件讀取使用的編解碼器模塊可以幫助你。

相反的,

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

嘗試,

import codecs 

,然後將所有的UTF-8文件,使用,

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

這爲Unicode自動讀取文件(utf-8),並可能將它們正確寫入您的文件。

+0

謝謝,你解決了我的問題與「外來字符」 – 2010-07-28 20:37:14

+0

@sheepz:很高興它幫助你 - 這當然不是解決OP的問題!) – 2010-07-28 20:40:52

相關問題