关于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()
关于python27和windows系统的中文编码问题的更多相关文章
- 非Unicode编码的软件如何在Windows系统上运行
我们常常会遇到这样一种情况:点开某些日文软件(我不会说就是galgame( ╯□╰ ))会出现乱码或者直接无法运行. 出现乱码的原因很简单:编码与译码的方式不一致!!!!!!!!!!! 首先大家需要知 ...
- Python - Windows系统下安装使用virtualenv
1 - virtualenv https://pypi.python.org/pypi/virtualenv/ https://github.com/pypa/virtualenv 在实际开发测试中, ...
- Python3: Windows系统上同时安装Python2和Python3
Python3: Windows系统上同时安装Python2和Python3 为什么要同时安装Python2和Python3环境呢? 因为一些库只支持Python2或者Python3; 在同一台电脑上 ...
- 在windows系统电脑上同时安装python2.x和python3.x版本
在同一个电脑机子(windows系统)上安装同时安装python2.x和python3.x版本. 一.python2.x和python3.x安装 步骤1:在python官网(https://www.p ...
- DOS下windows系统查看wifi密码
DOS下windows系统查看wifi密码 首先,按win+R键,win键如下 弹出框中输入cmd 在弹出界面输入 netsh wlan show profiles 你可以看到你链接过的所有wifi名 ...
- windows系统下fis3安装教程
注意:在安装fis3前必须安装node和npm,详情请见官网http://nodejs.org node版本要求 0.8.x,0.10.x, 0.12.x,4.x,6.x,不在此列表中的版本不予支持. ...
- Windows系统上的.Net版本和.NETFramework的C#版本
前言 注:本文内容摘自维基百科,用于在墙内时当作笔记看. WinForm 需要.Net最低版本 2.0 WPF需要的.Net最低版本 3.0 (Win7及之上版本自带) C#版本 版本 语言规格 日期 ...
- windows系统快捷操作の高级篇
上次介绍了windows系统上几个比较好用的软件和系统快捷键,虽然有些很方便,但是毕竟还是太少了,而且无法自定义专属于自己的快捷键.所以我写了这么一篇教程,主要介绍两个神器:windows平台上的au ...
- windows系统快捷操作の进阶篇
上次介绍了windows系统上一些自带的常用快捷键,有些确实很方便,也满足了我们的一部分需求.但是我们追求效率的步伐怎会止步于此?这一次我将会进一步介绍windows上提升效率的方法. 一:运行 打开 ...
随机推荐
- springCloud 服务注册启动报错<com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: connect>
报错:com.sun.jersey.api.client.ClientHandlerException: java.net.ConnectException: Connection refused: ...
- Linux基础(学习过程记录)
常用快捷键:Tab:使用Tab键来进行命令补全,补全目录.补全命令参数Ctrl+c键来强行终止当前程序Ctrl+d 键盘输入结束或退出终端Ctrl+s 暂停当前程序,暂停后按下任意键恢复运行Ctrl+ ...
- 6.3 基于二分搜索树、链表的实现的集合Set复杂度分析
两种集合类的复杂度分析 在[6.1]节与[6.2]节中分别以二分搜索树和链表作为底层实现了集合Set,在本节就两种集合类的复杂度分析进行分析:测试内容:6.1节与6.2节中使用的书籍.测试方法:测试两 ...
- Linux 文本文件编辑命令
1.cat 查看纯文本文件,内容较少的,cat[选项][文件],显示行号的 -n 2.more 查看纯文本文件,内容较多的,more[选项]文件 3.head 查看纯文本文档的前N行,head -n ...
- mvc后台上传
public ActionResult AddEnclosure(HttpPostedFileBase Filedata) { if (Filedata == null || string.IsNul ...
- ThreeJs 绘制点、线、面
所有的三位物体都是由点构成,两点构成线,三点构成面,ThreeJs又如何绘制出点.线.面呢 ? 在ThreeJs中: 模型由几何体和材质构成 模型以何种形式(点.线.面)展示取决于渲染方式 1. 几何 ...
- EasyUI在window中使用kindeditor 4.1.10在IE9中不能回显、获得焦点编辑的问题
描述 :kindeditor4.1.10版本是当前最新的版本,在浏览器兼容性和功能方面都是值得一赞的,在开发中能方便快捷的满足一些开发需求. 问题 : 问题总是有的. 在使用过程中,遇到EasyU ...
- Linux命令:popd
语法 popd [-n] [+N | -N | dir] 把目录弹栈,就是从栈里删除.popd只有删除一种意思,不像pushd,既有压栈,又有移动栈内目录的功能. 不带任何参数,模式删除栈顶,即最上面 ...
- NE76003单片机调试DS18B20 步骤
一.硬件部分 GND脚接地: DQ脚接P03,外加4K7上拉电阻: VCC脚接3.3v供电: 二.软件部分 1.配置P03为准准双向 IO类型: void Init_power_gpio(void){ ...
- Epson 微型打印机打印 LOGO C#
由于项目需要使用EPSON微型打印机打印LOGO,在网上查看了很多都是安装驱动然后设置打印机图片. 项目需要使用Bytes发送流,最后在网上找到了一些资料,记录下来方便自己和其他人使用. public ...