python中csv文件通过多种编码表示字符,python读取csv中文乱码utf8
最近发现有些文件在处理数据的时候是csv文件。Xiam的文章主要介绍了用Python批量转换csv文件为UTF-8的相关信息。通过示例代码非常详细的介绍,有需要的朋友可以参考一下。
当我们使用熊猫来操作CSV文件时,经常会因为编码问题而报错。
熊猫中的pandas_libs\parsers.pyx。_libs.parsers.TextReader.read()
熊猫中的pandas_libs\parsers.pyx。_ libs . parsers . textreader . _ read _ low _ memory()
熊猫中的pandas_libs\parsers.pyx。_ libs . parsers . textreader . _ read _ rows()
熊猫中的pandas_libs\parsers.pyx。_ libs . parsers . textreader . _ convert _ column _ data()
熊猫中的pandas_libs\parsers.pyx。_ libs . parsers . textreader . _ convert _ tokens()
熊猫中的pandas_libs\parsers.pyx。_ libs . parsers . textreader . _ convert _ with _ dtype()
熊猫中的pandas_libs\parsers.pyx。_ libs . parsers . textreader . _ string _ convert()
熊猫中的pandas_libs\parsers.pyx。_libs.parsers._string_box_utf8()
unicode decodedeerror : utf-8 编解码器无法解码位置0:处字节0xca无效连续字节
如果只是一两个文件,我们可以用系统自带的记事本解决:
1.右键单击csv文件并选择记事本将其打开。
2.ctrl shift s另存为,将编码方式从ansi改为UTF-8,点击确定,替换原文件。
如果太麻烦,也可以在每次带熊猫读csv之前添加以下代码。
进口熊猫作为pd
filename=222.csv
尝试:
df=pd.read_csv(文件名,编码=utf-8 )
除了BaseException:
df=pd.read_csv(文件名,编码=cp950 )
df.to_csv(文件名,编码=utf-8 ,索引=False)
如果有很多类似的ASCII csv文件,那就很头疼了。我们用Python写个程序,检测并批量转换CSV文件的编码方式。
需要指出的是,这个程序并不完善,运行速度也没有优化,有些文件还是转换不成功,但是已经足够满足日常的分析需求了。尝试后,有几个csv文件无法转换:
1.包含图片或图表的csv文件
2.原始csv文件有乱码。
我觉得很有帮助,所以请给这篇文章点个赞。
示范效应:
代码:
导入操作系统
从chardet.universaldetector导入universaldetector
def get_filelist(路径):
获取路径下所有csv文件的路径列表。
文件列表=[]
对于os.walk中的home、dir、files(路径):
对于文件:中的文件名
如果。文件名:中的“csv”
filelist . append(OS . path . join(home,filename))
返回文件列表
def read_file(文件):
逐个读取文件的内容。
打开(文件,“rb”)为f:
return f.read()
def get_encode_info(file):
"""
逐个读取文件的编码方式
"""
with open(file, rb) as f:
detector = UniversalDetector()
for line in f.readlines():
detector.feed(line)
if detector.done:
break
detector.close()
return detector.result[encoding]
def convert_encode2utf8(file, original_encode, des_encode):
"""
将文件的编码方式转换为utf-8,并写入原先的文件中。
"""
file_content = read_file(file)
file_decode = file_content.decode(original_encode, ignore)
file_encode = file_decode.encode(des_encode)
with open(file, wb) as f:
f.write(file_encode)
def read_and_convert(path):
"""
读取文件并转换
"""
Filelist = get_filelist(path=path)
fileNum= 0
for filename in Filelist:
try:
file_content = read_file(filename)
encode_info = get_encode_info(filename)
if encode_info != utf-8:
fileNum +=1
convert_encode2utf8(filename, encode_info, utf-8)
print(成功转换 %s 个文件 %s %(fileNum,filename))
except BaseException:
print(filename,存在问题,请检查!)
def recheck_again(path):
"""
再次判断文件是否为utf-8
"""
print(---------------------以下文件仍存在问题---------------------)
Filelist = get_filelist(path)
for filename in Filelist:
encode_info_ch = get_encode_info(filename)
if encode_info_ch != utf-8:
print(filename,的编码方式是:,encode_info_ch)
print(--------------------------检查结束--------------------------)
if __name__ == "__main__":
"""
输入文件路径
"""
path = ./
read_and_convert(path)
recheck_again(path)
print(转换结束!)
核心代码是:
def get_encode_info(file):"""
逐个读取文件的编码方式
"""
with open(file, rb) as f:
detector = UniversalDetector()
for line in f.readlines():
detector.feed(line)
if detector.done:
break
detector.close()
return detector.result[encoding]
Filelist = get_filelist(path=path)
fileNum= 0
for filename in Filelist:
try:
file_content = read_file(filename)
encode_info = get_encode_info(filename)
if encode_info != utf-8:
fileNum +=1
convert_encode2utf8(filename, encode_info, utf-8)
print(成功转换 %s 个文件 %s %(fileNum,filename))
except BaseException:
print(filename,存在问题,请检查!)
总结
到此这篇关于Python批量将csv文件编码方式转换为UTF-8的文章就介绍到这了,更多相关Python批量转换csv文件编码内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。