Python中可避免讀寫亂碼的乙個強大方法

2021-07-03 13:39:48 字數 2259 閱讀 5042

昨天在幫同學解析一批從網路上爬取的檔案時,遇到乙個奇葩的問題,檔案本身的編碼是gbk,eclipse編輯環境的預設編碼是utf8,使用常規的open方法批量開啟檔案時,某些檔案中存在一些不可被gbk識別的特殊字元導致讀取錯誤,而這些特殊字元又是存在於utf8編碼中的。經不斷嘗試,發現乙個很好的解決辦法:使用python自帶的codecs。codecs就是為編碼轉碼而生的,關於此功能的更多詳情請移步

# -*- coding: utf8 -*- 

#以下**要實現的效果是將gbk編碼的檔案批量轉存為utf8編碼的檔案

import os;

import codecs;

from bs4 import beautifulsoup;

#以gb18030編碼讀檔案的函式

defreadfile

(filepath,encoding="gb18030"):

#注意這裡的編碼格式

with codecs.open(filepath,"r",encoding) as f:

return f.read()

#以utf8編碼重新寫檔案的函式

defwritefile

(filepath,u,encoding="utf-8"):

with codecs.open(filepath,"w",encoding) as f:

f.write(u)

filelist=os.listdir("e:/content/"); #獲取原檔案列表

for eachfile in filelist: #遍歷檔名

temp=readfile("e:/content/"+eachfile); #讀檔案

writefile('e:/content_0629/'+eachfile, temp, "utf8"); #將讀取的內容轉存為utf8編碼的檔案

print('finished.')

另外,檔案完成轉存之後,在使用beautifulsoup進行解析時,想過濾掉一些雜訊資訊,完整**如下:

# -*- coding: utf8 -*- 

import os;

from bs4 import beautifulsoup;

n=0;

filelist=os.listdir("e:/content_0629");

for eachfile in filelist:

n=n+1; #設定檔案序號

rawtext= open(r"e:/content_0629/"+eachfile,'r',encoding='utf8');#讀檔案

bs4text=beautifulsoup(rawtext);#呼叫beautifulsoup進行解析

title=bs4text.find('h2'); #h2標籤中放的是文章正文標題

if(title==none): #判斷標題標籤是否存在,如果不存在則忽略當前檔案

continue;

else:

title=title.get_text(); #獲取標題內容文字

title=title.replace(" ","");#替換掉其中的全形空格

title=title.replace(" ","");#替換掉其中的半形空格

maincontent=bs4text.find('div',); #根據標籤名和標籤屬性值獲取正文內容標籤

if(maincontent==none):#判斷此標籤是否存在,如果不存在則忽略當前檔案

continue;

else:

maincontent=maincontent.get_text();

maincontent=maincontent.replace(" ","");

maincontent=maincontent.replace(" ","");

maincontent=maincontent.replace("\t","");

maincontent='\n'.join(maincontent.split()) #將多個連續的空行替換為乙個空行

#將解析後的文字儲存到檔案中,仍以utf8編碼

fwriter=open('e:/result_0629/resutl_'+str(n)+".txt",'w',encoding='utf8');

fwriter.write(title+"\n"+maincontent);

fwriter.close();

print('finished.')

處理Python2 7讀寫檔案中的中文亂碼問題

python2.7對於中文編碼的問題處理的並不好,這幾天在爬資料的時候經常會遇到中文的編碼問題。但是本人對編碼原理不了解,也沒時間深究其中的原理。在此僅從應用的角度做一下總結,在python 中的任何地方出現中文,編譯時都會報錯,這時可以在 的首行新增相應說明,明確utf 8編碼格式,可以解決一般情...

Python中的亂碼

我把寫好的python指令碼匯入到arcgis中的toolbox中,在本機測試是沒有問題的。為了把工具分享給其他人,即在其他電腦上使用,我必須將指令碼檔案 py 匯入到工具箱檔案 tbx 指令碼的路徑是本地系統的路徑,拷到其他機子上,這個路徑就不存在了,除非在其他機子了也建立如此路徑。好在arcgi...

Python中的亂碼

我把寫好的python指令碼匯入到arcgis中的toolbox中,在本機測試是沒有問題的。為了把工具分享給其他人,即在其他電腦上使用,我必須將指令碼檔案 py 匯入到工具箱檔案 tbx 指令碼的路徑是本地系統的路徑,拷到其他機子上,這個路徑就不存在了,除非在其他機子了也建立如此路徑。好在arcgi...