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)擊確定并替換原文件。
嫌麻煩的也可以在每次用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è)贊吧??
演示效果:
代碼:
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
小編寫(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ù)字和文本)。純文本...
小編寫(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...
小編寫(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 #...
小編寫(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中中...
摘要:之前在寫(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...
閱讀 923·2023-01-14 11:38
閱讀 895·2023-01-14 11:04
閱讀 756·2023-01-14 10:48
閱讀 2055·2023-01-14 10:34
閱讀 961·2023-01-14 10:24
閱讀 840·2023-01-14 10:18
閱讀 510·2023-01-14 10:09
閱讀 588·2023-01-14 10:02