Python中如何实现批量转换csv格式
Admin 2022-08-02 群英技术资讯 1017 次浏览
这篇文章主要讲解了“Python中如何实现批量转换csv格式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中如何实现批量转换csv格式”吧!当我们用pandas是操作CSV文件的时候,常常会因为编码问题出现报错。
pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader.read()
pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader._read_low_memory()
pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader._read_rows()
pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader._convert_column_data()
pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader._convert_tokens()
pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader._convert_with_dtype()
pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader._string_convert()
pandas_libs\parsers.pyx in pandas._libs.parsers._string_box_utf8()
UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xca in position 0: invalid continuation byte
如果只是一两个文件,我们可以用系统自带记事本的方法进行解决:
1、右键csv文件,打开方式选择“记事本”打开;
2、ctrl+shift+s另存为,将编码方式由ansi给改为UTF-8,点击确定并替换原文件。

嫌麻烦的也可以在每次用pandas读取csv前加入以下代码。
import pandas as pd
filename='222.csv'
try:
df = pd.read_csv(filename, encoding='utf-8')
except BaseException:
df = pd.read_csv(filename, encoding='cp950')
df.to_csv(filename, encoding='utf-8', index=False)
如果很多类似的ASCII的CSV文件就会非常头痛,下面我们用Python编写一个程序,用来检测并批量转换csv文件的编码方式。
需要指出的是,这个程序并不完善,运行速度没有进行优化,并且仍然有部分文件未能转换成功,但足以应对日常的分析需要。经过尝试,有几种csv文件无法转换:
1、包含图片或者图表的csv文件
2、原先的csv文件内容就是乱码的
觉得有帮助,那请给这篇文章点个赞吧️
演示效果:

代码:
import os
from chardet.universaldetector import UniversalDetector
def get_filelist(path):
"""
获取路径下所有csv文件的路径列表
"""
Filelist = []
for home, dirs, files in os.walk(path):
for filename in files:
if ".csv" in filename:
Filelist.append(os.path.join(home, filename))
return Filelist
def read_file(file):
"""
逐个读取文件的内容
"""
with open(file, 'rb') as 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,'存在问题,请检查!')
总结
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了利用制作的python小程序-飘落的银杏,代码详细,简单易懂,有需要练习python的朋友可以参考下
本文主要介绍了Python数据分析Matplotlib柱状图绘制,Matplotlib提供了bar()方法绘制柱状图,下面具体绘制介绍需要的小伙伴可以参考以一下
我们知道Django是由Python写成的,一个开放源代码的Web应用框架。本文主要给大家介绍django使用MQTT的方法,那么什么是MQTT?MQTT也叫做消息队列遥测传输协议,其最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。简单了解完MQTT,下面我们一起来看看在django中怎么使用MQTT。
这篇文章主要介绍了Pyqt5设置返回键和跳转页面键的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
CGI 程序可以是 Python 脚本,PERL 脚本,SHELL 脚本,C 或者 C++ 程序等。CGI 目前由 NCSA 维护,NCSA 定义 CGI 如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端 HTML 页面的接口。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008