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,點擊確定并替換原文件。
嫌麻煩的也可以在每次用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,'存在問題,請檢查!')
總結
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家帶來幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/128366.html
小編寫這篇文章的主要目的,主要還是給大家講解一下關于Python中CSV文件的相關內容,教給怎么樣去對大批量的數據,去進行分割。比如如何分割CSV文件呢?下面給大家詳細解答一下?! ∫弧sv文件介紹 1、csv文件簡介 逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本...
小編寫這篇文章的主要目的,主要是給大家去做一個解答,主要利用python去讀取和載入數據,其中包括讀取和寫入CSV文件,具體的一些詳細內容介紹,下面就給大家詳細解答下。 前言 CSV(Comma-Separated Values)即逗號分隔值,一種以逗號分隔按行存儲的文本文件,所有的值都表現為字符串類型(注意:數字為字符串類型)。如果CSV中有中文,應以utf-8編碼讀寫. 1.導入CS...
小編寫這篇文章的主要目的,主要是給大家做一個解答,解答有幾個方向,包括利用python合并csv文件的一些相關實例,下面就給大家做出一個解答?! ?.用concat方法合并csv 將兩個相同的csv文件進行數據合并,通過pandas的read_csv和to_csv來完成,即采用concat方法: #加載第三方庫 importpandasaspd importnumpyasnp #...
小編寫這篇文章的一個主要目的,主要是給大家去做一個解答,解答的內容主要還是python相關事宜,比如,可以用python正則表達式去匹配和提取中文漢字,那么,具體的內容做法是什么呢?下面就給大家詳細解答下。 python用正則表達式提取中文 Python re正則匹配中文,其實非常簡單,把中文的unicode字符串轉換成utf-8格式就可以了,然后可以在re中隨意調用 unicode中中...
摘要:之前在寫一個簡單的分班程序的時候,使用如下命令行讀取文件出現了報錯含義為程序由于文件編碼問題無法讀取文件。該行聲明了該程序讀取文件的編碼格式為。如仍報錯,可使用方法二解決。第二種使用命令,修改后文件出現亂碼。 注:該文章基于mac環境。 之前在寫一個簡單的分班程序的時候,使用如下命令行讀取csv文件, with open(city.csv) as f: lines = f.re...
閱讀 926·2023-01-14 11:38
閱讀 899·2023-01-14 11:04
閱讀 758·2023-01-14 10:48
閱讀 2063·2023-01-14 10:34
閱讀 965·2023-01-14 10:24
閱讀 844·2023-01-14 10:18
閱讀 512·2023-01-14 10:09
閱讀 590·2023-01-14 10:02