如何在python中使用csv.reader和法语字符,如éàçêë;,
我有一个csv文件,比如120列乘以4500行。 我阅读了第一列第一行中的字段“customer name”。 然后在第二个cvs文件中查找此字段,该文件包含“客户名称和客户ID” 我编写了一个新的cvs文件,其中包含“客户名称”、“客户ID”以及119 colunm中的所有其他内容,并一直持续到第一个文件的末尾 这是工作,但我有特殊的字符无处不在的前两个csv文件。 我不想用“Montr\xe9al Nord”代替Montréal Nord 或在生成的csv文件中使用“Val\xe9rie Lamarche”而不是“Valérie Lamarche” 下面是一个测试代码示例:如何在python中使用csv.reader和法语字符,如éàçêë;,,python,csv,Python,Csv,我有一个csv文件,比如120列乘以4500行。 我阅读了第一列第一行中的字段“customer name”。 然后在第二个cvs文件中查找此字段,该文件包含“客户名称和客户ID” 我编写了一个新的cvs文件,其中包含“客户名称”、“客户ID”以及119 colunm中的所有其他内容,并一直持续到第一个文件的末尾 这是工作,但我有特殊的字符无处不在的前两个csv文件。 我不想用“Montr\xe9al Nord”代替Montréal Nord 或在生成的csv文件中使用“Val\xe9rie L
# -*- 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()
有什么帮助吗
关于francois,尽管我不熟悉csv.reader或writer,但我最近一直在处理utf-8文件读取问题,也许使用编解码器模块可以帮助您 而不是
data = open(..., "wb")
试试看
然后对于所有utf-8文件,使用
data = codecs.open(..., "rb", "utf-8")
这会自动以unicode(utf-8)的形式读取您的文件,并可能将其正确写入您的文件。问题出在这一行:
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]` ] )
用“back ticks”或“grave accents”来包装表达式是一种过时且不受欢迎的表达方式
请考虑以下事项:
>>> 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
@sheepz:很高兴它帮了你--这肯定不是OP问题的解决方案!-)那不行!!:行[1:18]把所有信息都写在一列!!还是错的accent@francois:已修复;请重试。谢谢John,您刚刚保存了我的假期。在您的帮助下,我将能够在今晚之前导入所有这些文件。关于francoisI,我只需修改def Writefile(info1,info2)行:按def Writefile打印info1,info2(info1,info2):打印info1,info2,
行[1]
,行[2]
,行[3]
,行[4]
,…你知道吗?打印结果很好,但仍然不是结果。writerow…我的答案错误地包含了一个超级[
和]
——请参阅我的编辑。
resultat.writerow([info1, info2] + [line[1:18]]) # WRONG (sorry!)
resultat.writerow([info1, info2] + line[1:18]) # RIGHT