资讯专栏INFORMATION COLUMN

Python如何批量将csv文件编码方式转换为UTF-8?下面就给大家解答

89542767 / 1051人阅读

  csv文件其实就是单纯的储存文本数据的一种形式,那么,在日常的办公当中,要怎么做去提高其办公的效率呢?比如,如何使用Python去批量的进行处理文件,批量的处理csv文件,怎么将编码转换成为YTF-8的形式呢?下面给大家详细的解答下。


  当我们用pandas是操作CSV文件的时候,常常会因为编码问题出现报错。


  pandas_libsparsers.pyx in pandas._libs.parsers.TextReader.read()


  pandas_libsparsers.pyx in pandas._libs.parsers.TextReader._read_low_memory()


  pandas_libsparsers.pyx in pandas._libs.parsers.TextReader._read_rows()


  pandas_libsparsers.pyx in pandas._libs.parsers.TextReader._convert_column_data()


  pandas_libsparsers.pyx in pandas._libs.parsers.TextReader._convert_tokens()


  pandas_libsparsers.pyx in pandas._libs.parsers.TextReader._convert_with_dtype()


  pandas_libsparsers.pyx in pandas._libs.parsers.TextReader._string_convert()


  pandas_libsparsers.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,点击确定并替换原文件。

01.png

  嫌麻烦的也可以在每次用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文件内容就是乱码的


  觉得有帮助,那请给这篇文章点个赞吧❤️


  演示效果:

02.png

  代码:


  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,'存在问题,请检查!')

  总结


  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/128366.html

相关文章

  • PythonCSV文件如何分割?下面大家解答

      小编写这篇文章的主要目的,主要还是给大家讲解一下关于Python中CSV文件的相关内容,教给怎么样去对大批量的数据,去进行分割。比如如何分割CSV文件呢?下面给大家详细解答一下。  一、csv文件介绍  1、csv文件简介  逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本...

    89542767 评论0 收藏0
  • python中读取和写入CSV文件详情

      小编写这篇文章的主要目的,主要是给大家去做一个解答,主要利用python去读取和载入数据,其中包括读取和写入CSV文件,具体的一些详细内容介绍,下面就给大家详细解答下。  前言  CSV(Comma-Separated Values)即逗号分隔值,一种以逗号分隔按行存储的文本文件,所有的值都表现为字符串类型(注意:数字为字符串类型)。如果CSV中有中文,应以utf-8编码读写.  1.导入CS...

    89542767 评论0 收藏0
  • 利用python合并csv文件方式实例

      小编写这篇文章的主要目的,主要是给大家做一个解答,解答有几个方向,包括利用python合并csv文件的一些相关实例,下面就给大家做出一个解答。  1.用concat方法合并csv  将两个相同的csv文件进行数据合并,通过pandas的read_csv和to_csv来完成,即采用concat方法: #加载第三方库   importpandasaspd   importnumpyasnp   #...

    89542767 评论0 收藏0
  • 怎么用python正则表达式提取/匹配中文汉字

      小编写这篇文章的一个主要目的,主要是给大家去做一个解答,解答的内容主要还是python相关事宜,比如,可以用python正则表达式去匹配和提取中文汉字,那么,具体的内容做法是什么呢?下面就给大家详细解答下。  python用正则表达式提取中文  Python re正则匹配中文,其实非常简单,把中文的unicode字符串转换成utf-8格式就可以了,然后可以在re中随意调用  unicode中中...

    89542767 评论0 收藏0
  • mac中python读取csv文件编码报错问题解决

    摘要:之前在写一个简单的分班程序的时候,使用如下命令行读取文件出现了报错含义为程序由于文件编码问题无法读取文件。该行声明了该程序读取文件的编码格式为。如仍报错,可使用方法二解决。第二种使用命令,修改后文件出现乱码。 注:该文章基于mac环境。 之前在写一个简单的分班程序的时候,使用如下命令行读取csv文件, with open(city.csv) as f: lines = f.re...

    paulli3 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<