csv 文件读写乱码问题的一个简单解决方法

smocon2周前 (05-06)编程技术9

你好,我是 zhenguo

今天扼要总结一个处理csv文件乱码问题,可能你有类似经历,用excel打开一个csv文件,中文全部显示乱码。然后,手动用notepad++打开,修改编码为utf-8并保存后,再用excel打开显示正常。

今天使用Python,很少代码就能将上面过程自动化。首先,导入3个模块:

# coding: utf-8
# @author: zhenguo
# @date: 2020-12-16
# @describe: functions about automatic file processing

import pandas as pd  
import os 
import chardet

chardet 模块用于得到文件的编码格式,pandas 按照这个格式读取,然后保存为xlsx格式。

获取filename文件的编码格式:

def get_encoding(filename):
    """
    返回文件编码格式
    """
    with open(filename,'rb') as f:
        return chardet.detect(f.read())['encoding']

保存为utf-8编码xlsx格式文件,支持csv, xls, xlsx 格式的文件乱码处理。需要注意,如果读入文件为csv格式,保存时要使用xlsx格式:

def to_utf8(filename):
    """
    保存为 to_utf-8
    """
    encoding = get_encoding(filename)
    ext = os.path.splitext(filename)
    if ext[1] =='.csv':
        if 'gb' in encoding or 'GB' in encoding:
            df = pd.read_csv(filename,engine='python',encoding='GBK')
        else:
            df = pd.read_csv(filename,engine='python',encoding='utf-8')
        df.to_excel(ext[0]+'.xlsx')
    elif ext[1]=='.xls' or ext[1] == '.xlsx':
        if 'gb' in encoding or 'GB' in encoding:
            df = pd.read_excel(filename,encoding='GBK')
        else:
            df = pd.read_excel(filename,encoding='utf-8')
        df.to_excel(filename)
    else:
        print('only support csv, xls, xlsx format')

上面函数实现单个文件转化,下面batch_to_utf8 实现目录 path 下所有后缀为ext_name文件的批量乱码转化:

def batch_to_utf8(path,ext_name='csv'):
    """
    path下,后缀为 ext_name的乱码文件,批量转化为可读文件
    """
    for file in os.listdir(path):
        if os.path.splitext(file)[1]=='.'+ext_name:
            to_utf8(os.path.join(path,file))

调用:

if __name__ == '__main__':
  batch_to_utf8('.') # 对当前目录下的所有csv文件保存为xlsx格式,utf-8编码的文件

文件读写时乱码问题,经常会遇到,相信今天这篇文章里的to_utf8,batch_to_utf8函数会解决这个问题,你如果后面遇到,不妨直接引用这两个函数尝试下。

相关文章

数据总是出现乱码,不规范?3个小技巧,拯救表格的杂乱无章

工作中,最让你烦躁的是什么?一个简单的操作,却不知道哪里出了错,得不到想要的结果,一遍又一遍的检查,也发现不了问题所在,最终,一切推翻重来,从头做起。当你下次再遇上此类问题,心态瞬间瓦解,烦躁升级爆发...

Excel数字乱码怎么办?这样处理1秒解决,完美!

数据乱码一般的情况下是很少会遇到的,那要是一不小心就发生在你的身上,你会怎么解决了?以下是我为大家总结的几点不同数据乱码问题以及解决方法。一、Excel表格宽度不够,乱码情况就会发生问题1:表格宽度过...

盘点CSV文件在Excel中打开后乱码问题的两种处理方法

大家好,我是Python进阶者。前几天给大家分享了一些乱码问题的文章,阅读量还不错,感兴趣的小伙伴可以前往:盘点3种Python网络爬虫过程中的中文乱码的处理方法,UnicodeEncodeError...

EXCEL打开CSV等数据文件是乱码怎么办?

使用Data.olllo数据助手解决EXCEL打开CSV、TXT数据乱码的问题计算机存储的文件是有不同的编码方式,而有时候EXCEL打开CSV或TXT文件的时候,发现是乱码,这时候应该怎么办呢?工具:...

Excel导入CSV文件乱码?两个小方法让文件正常显示

最近网友抱怨,收到别人发来的数据表,打开后长这样:除了数字,其他是啥玩意儿完全乱码。。。(乱码!乱马!乱吗?乱!)但是当使用记事本打开,检查确认是否文件有问题时,显示完全正常,根本没有乱码。用最最普通...

Excel表格中怎么删除乱码?一秒搞定

随着我们越来越多的使用Excel,我们会发现很多情况下Excel会返回一串乱码似的字符。这些其实并不是乱码。Excel执行公式运算时都会自动对单元格中输入的公式进行检查,当公式如果不能正确地计算时返回...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。