项目场景:
工作中需要将接收到的csv文件自动导入mysql数据库。因为csv文件中包含中文,在linux系统用python2处理时出现了编码格式问题。
问题描述:
实际接收到的csv文件中,中文为gbk编码,而导入mysql数据库需改为utf-8编码。如果按以下方式直接读取数据,中文会是乱码。
#encoding=UTF-8
import csv
import gzip
filePath = './test.csv.gz'
with gzip.open(filePath) as f:
f_csv = csv.reader(f.read().splitlines(),delimiter=',')
for row in f_csv:
for i in row:
print(i)
print(chardet.detect(i))
break
解决方案:
对csv文件中的每项(或者中文部分)先进行 decode,再以 utf-8 格式编码即可。
具体代码如下
import csv
import gzip
filePath = './test.csv.gz'
data = []
with gzip.open(filePath) as f:
f_csv = csv.reader(f.read().splitlines(),delimiter=',') # 读取csv数据
for row in f_csv:
row_new=[]
for i in row:
temp = i.decode('GB2312').encode('utf-8') # 对每行中的每个数据进行解码再编码
print(temp)
row_new.append(temp) # 重新拼成一行
print(str(row_new).decode('string_escape')) # python2要在linux环境下正常显示中文需进行该设定
break