最近想写一个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. 河北省重大技术需求征集系统原型(MVC框架业务流程简介)

    这段时间了解了一些MVC框架. 一.MVC简介 MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式.它的模式是JSP + se ...

  2. 微信小程序image bindload事件失效不触发

    1.先上代码 <template> <div :class="['img-wrapper', className]"> <img :src=" ...

  3. java8-函数编程

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

  4. html5自带表单验证

    起因:今天无意中发现chrome的input框自带表单验证!于是就去试试firefox,惊奇的发现也有自带的验证提示,只不过两者的样式不一样 chrome中的样子: firefox中的样子: 发散:具 ...

  5. springboot学习随笔(三):Controller参数映射

    接上章内容,我们看看浏览器参数如何映射到我们的Controller层 我们新建UserController和User实 User.java package com.example.main; impo ...

  6. Python科学计算结果的存储与读取

    Python科学计算结果的存储与读取 总结于2019年3月17日  荆楚理工学院 计算机工程学院 一.前言 显然,作为一名工科僧,执行科学计算,需用Python.PS:快忘记Matlab吧.我用了二十 ...

  7. FICO-初级会计学

    初级会计学 https://wenku.baidu.com/view/39257b1a59eef8c75fbfb348.html?from=search https://wenku.baidu.com ...

  8. centos7 设置nginx和php开机自启动

    nginx开机自启动 首先我是源码安装的,需要手动建立nginx.service服务文件 cd /lib/systemd/system touch nginx.service nginx.servic ...

  9. K8s简单yaml文件运行例子deployment

    kubectl run 创建并运行一个或多个容器镜像. 创建一个deployment 或job 来管理容器. kubectl run 语法: $ run NAME --image=image [--e ...

  10. 为什么打开fiddler电脑就不能上网,关了就能正常打开了呢?

    因为打开fiddler是它修改浏览器走代理服务器,关掉fiddler之后,代理服务器已经关闭了.但是,但是浏览器的代理模式还没改回来,就是说浏览器还要通过代理访问站点,然而代理服务器已经没有了.打开浏 ...