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

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

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

當我們用pandas是操作CSV文件的時候,常常會因為編碼問題出現(xiàn)報錯。

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

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

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文件的編碼方式。

需要指出的是,這個程序并不完善,運行速度沒有進行優(yōu)化,并且仍然有部分文件未能轉換成功,但足以應對日常的分析需要。經過嘗試,有幾種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,'存在問題,請檢查!')

總結

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

相關文章

  • Python使用正則表達式過濾或替換HTML標簽的方法詳解

    Python使用正則表達式過濾或替換HTML標簽的方法詳解

    這篇文章主要介紹了Python使用正則表達式過濾或替換HTML標簽的方法,簡單介紹了Python正則相關語法并結合具體實例形式分析了Python基于正則表達式的HTML標簽過濾與替換相關操作技巧,需要的朋友可以參考下
    2017-09-09
  • Python 中最長公共子序列的長度

    Python 中最長公共子序列的長度

    子序列是在不改變剩余字符的順序的情況下,在刪除一些字符或不刪除任何字符后從給定序列獲得的序列,這篇文章主要介紹了Python 中的最長公共子序列,需要的朋友可以參考下
    2023-06-06
  • python使用turtle庫繪制奧運五環(huán)

    python使用turtle庫繪制奧運五環(huán)

    turtle也叫海龜,是turtle繪圖體系的python實現(xiàn),這篇文章主要介紹了python使用turtle庫繪制奧運五環(huán),本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2020-02-02
  • Using Django with GAE Python 后臺抓取多個網站的頁面全文

    Using Django with GAE Python 后臺抓取多個網站的頁面全文

    這篇文章主要介紹了Using Django with GAE Python 后臺抓取多個網站的頁面全文,需要的朋友可以參考下
    2016-02-02
  • Python圖像處理庫處理步驟

    Python圖像處理庫處理步驟

    這篇文章主要介紹了Python圖像處理探索之Python圖像處理庫,我們將學習使用不同的 Python 庫實現(xiàn)一些常見的圖像處理、變換和可視化技術,這些技術通常可以用作更復雜的圖像處理任務的基本預處理/后處理步驟,需要的朋友可以參考下
    2023-04-04
  • Pytest框架 conftest.py文件的使用詳解

    Pytest框架 conftest.py文件的使用詳解

    conftest.py是pytest特有的本地測試配置文件,既可以用來設置項目級別的fixture,也可以用來導入外部插件,本文給大家介紹Pytest框架 conftest.py文件的使用,感興趣的朋友一起看看吧
    2022-06-06
  • 基于python介紹pytorch保存和恢復參數

    基于python介紹pytorch保存和恢復參數

    這篇文章主要介紹了基于python介紹pytorch保存和恢復參數,為了恢復模型,我們需要用代碼生成框架,然后從磁盤加載參數,下面具體的相關介紹,需要的小伙伴可以參考一下
    2022-03-03
  • Pycharm之快速定位到某行快捷鍵的方法

    Pycharm之快速定位到某行快捷鍵的方法

    今天小編就為大家分享一篇Pycharm之快速定位到某行快捷鍵的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 簡單聊聊Python中多線程與類方法的交互

    簡單聊聊Python中多線程與類方法的交互

    在Python編程中,多線程是一種提高程序運行效率的有效手段,本文將通過簡潔的語言、清晰的邏輯和實際的代碼案例,探討Python多線程如何調用類方法,感興趣的可以了解下
    2025-01-01
  • pandas預處理部分地區(qū)數據案例

    pandas預處理部分地區(qū)數據案例

    本文主要介紹了pandas預處理部分地區(qū)數據案例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01

最新評論