成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Python如何批量將csv文件編碼方式轉(zhuǎn)換為UTF-8?下面就給大家解答

89542767 / 1738人閱讀

  csv文件其實(shí)就是單純的儲(chǔ)存文本數(shù)據(jù)的一種形式,那么,在日常的辦公當(dāng)中,要怎么做去提高其辦公的效率呢?比如,如何使用Python去批量的進(jìn)行處理文件,批量的處理csv文件,怎么將編碼轉(zhuǎn)換成為YTF-8的形式呢?下面給大家詳細(xì)的解答下。


  當(dāng)我們用pandas是操作CSV文件的時(shí)候,常常會(huì)因?yàn)榫幋a問(wèn)題出現(xiàn)報(bào)錯(cuò)。


  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


  如果只是一兩個(gè)文件,我們可以用系統(tǒng)自帶記事本的方法進(jìn)行解決:


  1、右鍵csv文件,打開(kāi)方式選擇“記事本”打開(kāi);


  2、ctrl+shift+s另存為,將編碼方式由ansi給改為UTF-8,點(diǎn)擊確定并替換原文件。

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)


  如果很多類(lèi)似的ASCII的CSV文件就會(huì)非常頭痛,下面我們用Python編寫(xiě)一個(gè)程序,用來(lái)檢測(cè)并批量轉(zhuǎn)換csv文件的編碼方式。


  需要指出的是,這個(gè)程序并不完善,運(yùn)行速度沒(méi)有進(jìn)行優(yōu)化,并且仍然有部分文件未能轉(zhuǎn)換成功,但足以應(yīng)對(duì)日常的分析需要。經(jīng)過(guò)嘗試,有幾種csv文件無(wú)法轉(zhuǎn)換:


  1、包含圖片或者圖表的csv文件


  2、原先的csv文件內(nèi)容就是亂碼的


  覺(jué)得有幫助,那請(qǐng)給這篇文章點(diǎn)個(gè)贊吧??


  演示效果:

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):
  """
  逐個(gè)讀取文件的內(nèi)容
  """
  with open(file,'rb')as f:
  return f.read()
  def get_encode_info(file):
  """
  逐個(gè)讀取文件的編碼方式
  """
  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):
  """
  將文件的編碼方式轉(zhuǎn)換為utf-8,并寫(xiě)入原先的文件中。
  """
  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):
  """
  讀取文件并轉(zhuǎn)換
  """
  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('成功轉(zhuǎn)換%s個(gè)文件%s'%(fileNum,filename))
  except BaseException:
  print(filename,'存在問(wèn)題,請(qǐng)檢查!')
  def recheck_again(path):
  """
  再次判斷文件是否為utf-8
  """
  print('---------------------以下文件仍存在問(wèn)題---------------------')
  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('--------------------------檢查結(jié)束--------------------------')
  if __name__=="__main__":
  """
  輸入文件路徑
  """
  path='./'
  read_and_convert(path)
  recheck_again(path)
  print('轉(zhuǎn)換結(jié)束!')

  核心代碼是:


  def get_encode_info(file):
  """
  逐個(gè)讀取文件的編碼方式
  """
  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('成功轉(zhuǎn)換%s個(gè)文件%s'%(fileNum,filename))
  except BaseException:
  print(filename,'存在問(wèn)題,請(qǐng)檢查!')

  總結(jié)


  綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)?lái)幫助。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/128366.html

相關(guān)文章

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

      小編寫(xiě)這篇文章的主要目的,主要還是給大家講解一下關(guān)于Python中CSV文件的相關(guān)內(nèi)容,教給怎么樣去對(duì)大批量的數(shù)據(jù),去進(jìn)行分割。比如如何分割CSV文件呢?下面給大家詳細(xì)解答一下。  一、csv文件介紹  1、csv文件簡(jiǎn)介  逗號(hào)分隔值(Comma-Separated Values,CSV,有時(shí)也稱(chēng)為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?hào)),其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)。純文本...

    89542767 評(píng)論0 收藏0
  • python中讀取和寫(xiě)入CSV文件詳情

      小編寫(xiě)這篇文章的主要目的,主要是給大家去做一個(gè)解答,主要利用python去讀取和載入數(shù)據(jù),其中包括讀取和寫(xiě)入CSV文件,具體的一些詳細(xì)內(nèi)容介紹,下面就給大家詳細(xì)解答下?! ∏把浴 SV(Comma-Separated Values)即逗號(hào)分隔值,一種以逗號(hào)分隔按行存儲(chǔ)的文本文件,所有的值都表現(xiàn)為字符串類(lèi)型(注意:數(shù)字為字符串類(lèi)型)。如果CSV中有中文,應(yīng)以u(píng)tf-8編碼讀寫(xiě).  1.導(dǎo)入CS...

    89542767 評(píng)論0 收藏0
  • 利用python合并csv文件方式實(shí)例

      小編寫(xiě)這篇文章的主要目的,主要是給大家做一個(gè)解答,解答有幾個(gè)方向,包括利用python合并csv文件的一些相關(guān)實(shí)例,下面就給大家做出一個(gè)解答?! ?.用concat方法合并csv  將兩個(gè)相同的csv文件進(jìn)行數(shù)據(jù)合并,通過(guò)pandas的read_csv和to_csv來(lái)完成,即采用concat方法: #加載第三方庫(kù)   importpandasaspd   importnumpyasnp   #...

    89542767 評(píng)論0 收藏0
  • 怎么用python正則表達(dá)式提取/匹配中文漢字

      小編寫(xiě)這篇文章的一個(gè)主要目的,主要是給大家去做一個(gè)解答,解答的內(nèi)容主要還是python相關(guān)事宜,比如,可以用python正則表達(dá)式去匹配和提取中文漢字,那么,具體的內(nèi)容做法是什么呢?下面就給大家詳細(xì)解答下?! ython用正則表達(dá)式提取中文  Python re正則匹配中文,其實(shí)非常簡(jiǎn)單,把中文的unicode字符串轉(zhuǎn)換成utf-8格式就可以了,然后可以在re中隨意調(diào)用  unicode中中...

    89542767 評(píng)論0 收藏0
  • mac中python讀取csv文件編碼報(bào)錯(cuò)問(wèn)題解決

    摘要:之前在寫(xiě)一個(gè)簡(jiǎn)單的分班程序的時(shí)候,使用如下命令行讀取文件出現(xiàn)了報(bào)錯(cuò)含義為程序由于文件編碼問(wèn)題無(wú)法讀取文件。該行聲明了該程序讀取文件的編碼格式為。如仍報(bào)錯(cuò),可使用方法二解決。第二種使用命令,修改后文件出現(xiàn)亂碼。 注:該文章基于mac環(huán)境。 之前在寫(xiě)一個(gè)簡(jiǎn)單的分班程序的時(shí)候,使用如下命令行讀取csv文件, with open(city.csv) as f: lines = f.re...

    paulli3 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<