最近想写一个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. SpringBoot+Mybatis实现关联查询

    SpringBoot+Mybatis实现关联查询 今天学习了下Mybatis的动态查询,然后接着上次的Demo改造了下实现表的关联查询. 话不多说,开始今天的小Demo 首先接着上次的项目 https ...

  2. Flex 布局的教程

    前言:以前也经常用flex布局,但是最近看到别人使用的时候,发觉以前自己还是不够理解这个,重新看了一遍http://www.ruanyifeng.com/blog/2015/07/flex-gramm ...

  3. CUDA编程模型——组织并行线程2 (1D grid 1D block)

    在”组织并行编程1“中,通过组织并行线程为”2D grid 2D block“对矩阵求和,在本文中通过组织为 1D grid 1D block进行矩阵求和.一维网格和一维线程块的结构如下图: 其中,n ...

  4. centos mysql 默认是区分大小写的,修改成不区分大小写

    修改mysql为不区分大小写设置: [root@test-huanqiu ~]# vim /etc/my.cnf //添加下面一行设置 .... [mysqld] lower_case_table_n ...

  5. JAVA学习记录(二)————JAVA中的IO

    Java中I/O操作主要是指使用Java进行输入,输出操作. Java所有的I/O机制都是基于数据流进行输入输出,这些数据流表示了字符或者字节数据的流动序列. 数据流是一串连续不断的数据的集合,就象水 ...

  6. python-day18 JS正则,组件BootStrap、EasyUI、JQueryUI1,插件轮播,django

    @第一节课程内容 js正则 登录注册验证 @text-判断字符串是否符合规定的正则 @exec-获取匹配的数据 bootstrap(组件) –css –js 学习bootstrap规则 jQueryu ...

  7. orcal - 增删改

    数据跟新 增删改 将emp复制到myemp CREATE TABLE myemp AS SELECT * FROM emp; 新增: INSERT INTO 表名称[(列名称1,列名称2,.....) ...

  8. springboot学习随笔(四):Springboot整合mybatis(含generator自动生成代码)

    这章我们将通过springboot整合mybatis来操作数据库 以下内容分为两部分,一部分主要介绍generator自动生成代码,生成model.dao层接口.dao接口对应的sql配置文件 第一部 ...

  9. c#中委托和事件(转)

    C# 中的委托和事件 引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真 ...

  10. Python conda安装 并安装Tensorflow

    Python conda安装 1: 官网下载3版本 Anaconda2-2018.12-Windows-x86_64.exe, 安装完后配置环境变量 用户变量->PATH 编辑新增路径 C:\P ...