最近想写一个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()

关于python27和windows系统的中文编码问题的更多相关文章

  1. 非Unicode编码的软件如何在Windows系统上运行

    我们常常会遇到这样一种情况:点开某些日文软件(我不会说就是galgame( ╯□╰ ))会出现乱码或者直接无法运行. 出现乱码的原因很简单:编码与译码的方式不一致!!!!!!!!!!! 首先大家需要知 ...

  2. Python - Windows系统下安装使用virtualenv

    1 - virtualenv https://pypi.python.org/pypi/virtualenv/ https://github.com/pypa/virtualenv 在实际开发测试中, ...

  3. Python3: Windows系统上同时安装Python2和Python3

    Python3: Windows系统上同时安装Python2和Python3 为什么要同时安装Python2和Python3环境呢? 因为一些库只支持Python2或者Python3; 在同一台电脑上 ...

  4. 在windows系统电脑上同时安装python2.x和python3.x版本

    在同一个电脑机子(windows系统)上安装同时安装python2.x和python3.x版本. 一.python2.x和python3.x安装 步骤1:在python官网(https://www.p ...

  5. DOS下windows系统查看wifi密码

    DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...

  6. windows系统下fis3安装教程

    注意:在安装fis3前必须安装node和npm,详情请见官网http://nodejs.org node版本要求 0.8.x,0.10.x, 0.12.x,4.x,6.x,不在此列表中的版本不予支持. ...

  7. Windows系统上的.Net版本和.NETFramework的C#版本

    前言 注:本文内容摘自维基百科,用于在墙内时当作笔记看. WinForm 需要.Net最低版本 2.0 WPF需要的.Net最低版本 3.0 (Win7及之上版本自带) C#版本 版本 语言规格 日期 ...

  8. windows系统快捷操作の高级篇

    上次介绍了windows系统上几个比较好用的软件和系统快捷键,虽然有些很方便,但是毕竟还是太少了,而且无法自定义专属于自己的快捷键.所以我写了这么一篇教程,主要介绍两个神器:windows平台上的au ...

  9. windows系统快捷操作の进阶篇

    上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...

随机推荐

  1. QVector也是隐式数据共享的

    Behind the scenes, QString uses implicit sharing (copy-on-write) to reduce memory usage and to avoid ...

  2. PHP大神必须养成的十大优良习惯

    1.多阅读手册和源代码 没什么比阅读手册更值得强调的事了–仅仅通过阅读手册你就可以学习到很多东西,特别是很多有关于字符串和数组的函数.就在这些函数里面包括许多有用 的功能,如果你仔细阅读手册,你会经常 ...

  3. java8-函数编程

    在Function里面看到一个很奇怪的代码 static <T> Function<T, T> identity() { return t -> t; } 手动写了几个代 ...

  4. PHP实现防止SQL注入的2种方法

    PHP简单实现防止SQL注入的方法,结合实例形式分析了PHP防止SQL注入的常用操作技巧与注意事项,PHP源码备有详尽注释便于理解,需要的朋友可以参考下! 方法一:execute代入参数 $var_V ...

  5. IDL实现矢量文件裁剪栅格数据

    利用ENVI_SUBSET_VIA_ROI_DOIT函数实现矢量文件裁剪栅格数据. 测试数据:栅格文件是Mercator投影,矢量文件是Geographic坐标系 infile='F:\Temp_Da ...

  6. rest_famework 增删改查初第二阶段(中级,此阶段是优化初级阶段的代码)的使用

    url: re_path('authors/$', views.AuthorView.as_view()),re_path('authors/(\d+)/$', views.AuthorDetailV ...

  7. Unresolved externa Round

    [ilink32 Error] Error: Unresolved external '__stdcall Round(const double, int)' referenced from e:\工 ...

  8. html5 Sortable.js 拖拽排序源码分析

    最近公司项目经常用到一个拖拽 Sortable.js插件,所以有空的时候看了 Sortable.js 源码,总共1300多行这样,写的挺完美的.   本帖属于原创,转载请出名出处. 官网http:// ...

  9. JavaScript值全等判断

    作为开发员,很多时候拿到数据之后都是要做数据判断,比较特别的情况就是我们需要做数组判断和对象判断,经常的我们就array === array ,object === object;但是可惜是我们得到的 ...

  10. html页面转jsp后 乱码问题。

    在jsp文件中的html显示乱码是因为服务端和客户端的编码不一致导致的.如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码.解决办法:1.未指定使用字符集 ...