如何在 python 中使用带有法语字符的 csv.reader,例如 é,à,ç,ê,ë,
我有一个 120 列 x 4500 行的 csv 文件。 我读到第一行第一列中的“客户名称”字段。 然后,我在第二个 cvs 文件中查找此字段,其中包含“客户名称和客户 ID” 我编写了一个新的 cvs 文件,其中包含“客户名称”、客户 ID“以及 119 列的所有其余部分。并继续直到第一个文件的末尾。
这是有效的,但前两个 csv 文件中到处都有特殊字符。 我不想用“Montr\xe9al-Nord”代替 Montréal-Nord 或在生成的 csv 文件中使用“Val\xe9rie Lamarche”而不是“Valérie Lamarche”。
这是一个测试代码示例:
# -*- 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()
有帮助吗?
问候,弗朗索瓦
I have a csv file like 120 column by 4500 row.
I read the field "customer name" in the first column, first row.
I then look fot this field in a second cvs file containing the "customer name , and customer ID"
I write a new cvs file with "customer name", customer ID", and all the rest of the 119 colunm.and continue until end of first file.
This is working, but I have special character everywhere in the first two csv files.
And I dont want to have 'Montr\xe9al-Nord' instead of Montréal-Nord
or 'Val\xe9rie Lamarche' instead of 'Valérie Lamarche' in the resulting csv file.
here is a test code 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()
Any help ?
regards, francois
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
虽然我不熟悉 csv.reader 或 writer,但我最近一直在处理 utf-8 文件读取,也许使用编解码器模块可能会帮助你。
而不是
尝试,
然后对于所有 utf-8 文件,使用,
这会自动将您的文件读取为 unicode (utf-8),并可能将它们正确写入您的文件。
Although I am not familiar with csv.reader or writer, I have been dealing with utf-8 file reading recently and perhaps using the codecs module might help you out.
Instead of,
try,
and then for all your utf-8 files, use,
This automatically reads your files in as unicode (utf-8) and might write them to your file correctly.
问题出在这一行:
用“反引号”(又名“重音符号”)包装表达式是一种老式且已弃用的表示
repr(expression)
的方式。请考虑以下事项:
有问题的(以 3 种方式)行应简单地替换为
The problem is in this line:
Wrapping an expression in "back-ticks" aka "grave accents" is an old-fashioned and deprecated way of saying
repr(expression)
.Please consider the following:
The offending (in 3 ways) line should be simply replaced by