關於python27和windows系統的中文編碼問題


最近想寫一個python腳本實現對文件夾中的文件進行批量命名。每個文件對應從txt文檔中提取出來的一行,因為文件名是中文,所以涉及到了一些中文編碼的問題。

腳本運行環境是win10+python27

首先,從txt中提取出中文字符編碼格式和window系統里面中文文件名的編碼格式是不同的。所以在提取之后需要將字符先解碼成unicode再編碼成對應的格式,然后對文件進行重命名。

很明確的一點是win10系統中中文文件名的編碼格式是gbk,但是不是很懂txt里中文字符的編碼到底是什么格式。在txt文檔的另存為界面看到的編碼方式是ANSI碼,ANSI是擴展的ASCII編碼,在簡體中文Windows操作系統中,ANSI 編碼代表 GBK 編碼。但在python代碼里面是用gb2312對它做的解碼,解碼也成功。

查資料顯示gbk是gb2312的一個拓展版本,gb2312編碼標准頒布於1980年,支持的中文漢字比較不全,而gbk是1995年頒布的。所以我猜測使用gbk來解碼從txt中提取的中字也是可以的。但是由於本人被編碼解碼弄得十分煩惱,索性拋棄了py27投入了py3的懷抱,所以無法檢驗我的猜測了。

py3真的完全不需要編碼解碼,直接從txt里面提取出文字然后重命名就可以了。

然后最后要強調的一點是,用readline()讀一行的時候,記得用strip()把換行符去掉啊!!!因為沒有去掉換行符,就一直懷疑是編碼的問題,搞了一個多小時也沒弄出來。

最后我想說,能用代碼做的事情,就不要人工做。第一次感受到了一名程序員能夠給自己創造的便利。

最后把代碼貼上。

#coding:utf-8
import os

def rename():
    path = "C:/Users/ying/Desktop/pic/step_2"
    headlinePath = "C:/Users/ying/Desktop/pic/headlines.txt"
    hlp = open(headlinePath)
    filelist = os.listdir(path)
    for file in filelist:
        oldFileDir = os.path.join(path,file)
        filetype = os.path.splitext(file)[1]
        headline = hlp.readline().strip()
        headline = headline.decode('gb2312','ignore').encode('gbk')
        print headline
        newFileName = headline+filetype
        newFileDir = os.path.join(path,newFileName)
        try:
            os.rename(oldFileDir, newFileDir)
        except:
            print "test"
            continue


rename()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM