关于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()

猜你喜欢

转载自www.cnblogs.com/yingying7/p/9198992.html