欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python批量將csv文件編碼方式轉(zhuǎn)換為UTF-8的實(shí)戰(zhàn)記錄

 更新時(shí)間:2022年07月04日 10:49:40   作者:牧文山  
近日在處理數(shù)據(jù)的時(shí)候發(fā)現(xiàn)有的文件為csv文件,Xiam 這篇文章主要給大家介紹了關(guān)于利用Python批量將csv文件編碼方式轉(zhuǎn)換為UTF-8的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

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

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

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

1、右鍵csv文件,打開方式選擇“記事本”打開;
2、ctrl+shift+s另存為,將編碼方式由ansi給改為UTF-8,點(diǎn)擊確定并替換原文件。

嫌麻煩的也可以在每次用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文件就會(huì)非常頭痛,下面我們用Python編寫一個(gè)程序,用來檢測(cè)并批量轉(zhuǎn)換csv文件的編碼方式。

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

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

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

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

演示效果:

代碼:

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,并寫入原先的文件中。
    """    
    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,'存在問題,請(qǐng)檢查!')

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('--------------------------檢查結(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,'存在問題,請(qǐng)檢查!')

總結(jié)

到此這篇關(guān)于Python批量將csv文件編碼方式轉(zhuǎn)換為UTF-8的文章就介紹到這了,更多相關(guān)Python批量轉(zhuǎn)換csv文件編碼內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 上帝為你開了一扇窗之Tkinter常用函數(shù)詳解

    上帝為你開了一扇窗之Tkinter常用函數(shù)詳解

    構(gòu)思了很長(zhǎng)一段時(shí)間,總感覺不夠有趣,于是打算出一個(gè)完整的系列,讓大家一起感受python的樂趣.這個(gè)系列著重以系統(tǒng)庫中的tkinter為中心來圍繞進(jìn)行編寫.因此我們的第一步是導(dǎo)入模塊, 第一節(jié)就來為大家建立一個(gè)窗口 ,需要的朋友可以參考下
    2021-06-06
  • 解決Keras中CNN輸入維度報(bào)錯(cuò)問題

    解決Keras中CNN輸入維度報(bào)錯(cuò)問題

    這篇文章主要介紹了解決Keras中CNN輸入維度報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 基于Python實(shí)現(xiàn)在控制臺(tái)查看excel的內(nèi)容

    基于Python實(shí)現(xiàn)在控制臺(tái)查看excel的內(nèi)容

    這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)在控制臺(tái)查看excel的內(nèi)容,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • 詳解 Python中LEGB和閉包及裝飾器

    詳解 Python中LEGB和閉包及裝飾器

    這篇文章主要介紹了詳解 Python中LEGB和閉包及裝飾器的相關(guān)資料,主要介紹了函數(shù)作用域和閉包的理解和使用方法及Python中的裝飾器,需要的朋友可以參考下
    2017-08-08
  • Python關(guān)于__name__屬性的含義和作用詳解

    Python關(guān)于__name__屬性的含義和作用詳解

    在本篇文章里小編給大家分享的是關(guān)于Python關(guān)于__name__屬性的含義和作用知識(shí)點(diǎn),需要的朋友們可以參考下。
    2020-02-02
  • python 調(diào)用HBase的簡(jiǎn)單實(shí)例

    python 調(diào)用HBase的簡(jiǎn)單實(shí)例

    下面小編就為大家?guī)硪黄猵ython 調(diào)用HBase的簡(jiǎn)單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Python常用模塊os.path之文件及路徑操作方法

    Python常用模塊os.path之文件及路徑操作方法

    os.path 模塊主要用于獲取文件的屬性。這篇文章主要介紹了Python常用模塊os.path——文件及路徑操作,需要的朋友可以參考下
    2019-12-12
  • Pytorch數(shù)據(jù)拼接與拆分操作實(shí)現(xiàn)圖解

    Pytorch數(shù)據(jù)拼接與拆分操作實(shí)現(xiàn)圖解

    這篇文章主要介紹了Pytorch數(shù)據(jù)拼接與拆分操作實(shí)現(xiàn)圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

    Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能

    django是python語言的一個(gè)web框架,功能強(qiáng)大。配合一些插件可為web網(wǎng)站很方便地添加搜索功能。下面通過本文給大家分享Python中使用haystack實(shí)現(xiàn)django全文檢索搜索引擎功能,感興趣的朋友一起看看吧
    2017-08-08
  • python數(shù)據(jù)可視化之matplotlib.pyplot基礎(chǔ)以及折線圖

    python數(shù)據(jù)可視化之matplotlib.pyplot基礎(chǔ)以及折線圖

    不論是數(shù)據(jù)挖掘還是數(shù)據(jù)建模,都免不了數(shù)據(jù)可視化的問題,對(duì)于Python來說,Matplotlib是最著名的繪圖庫,它主要用于二維繪圖,這篇文章主要給大家介紹了關(guān)于python數(shù)據(jù)可視化之matplotlib.pyplot基礎(chǔ)以及折線圖的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評(píng)論