Python3与Python2.x系列的编码处理(类型,文件等)有所不同,具体这里就不再介绍了,网上有很多相关文章。

这里分享一个纠结了非常久的问题(因为一开始没特别注意函数参数的编码问题,所以浪费了不少时间,希望能给同样遇到这个问题的朋友们一点帮助)。

os.walk()函数是在需要深度访问一个目录时经常要使用的,前段时间在写一个toolkit(稍后陆续放出),里面有个功能需要这个函数,以前使用时传递的参数都是英文的,所以没太注意这个问题,没想到这次在使用中文的时候麻烦就出现了。先来看两个函数(文件头:# -*- coding: UTF-8 -*-):

def encrypt(dir,outfile,suffix,recursion):exts = suffix.split("|")all_files=[]print('传入的目录:'+dir.decode('gbk'))#请注意,print的时候需要decode下,不然是乱码#当前递归的目录,当前递归的目录下的所有子目录,当前递归的目录下的所有文件for root, dirs, files in os.walk(dir):print('正在调用...')for name in files:file_path=unicode(os.path.join(root,name),'gbk')#全称,正确地取得windows下的中文文件名extension=os.path.splitext(file_path)[1]if extension[:1]!='.':extension='.'+extensionif extension in exts:oldfile=file_pathextensionlen=-len(extension)newfile=oldfile[:extensionlen]+'-new'+extensionos.rename(oldfile, newfile)all_files.append('/'.join(file_path.split('\\'))+"<>"+'/'.join(newfile.split('\\')))if(not recursion):breakif len(all_files)>0:file = open(outfile,"w")try:file.write("\n".join(all_files))print('successfully writes %d lines(files).' %len(all_files))finally:file.close()else:print('sorry,no files found!')

def invoke():#dir=unicode("D:/allfiles/备份/a",'gbk')千万别想反了,要编码而不是解码#dir="D:/allfiles/"英文时不用编码即可正确执行dir="D:/allfiles/备份/a".encode('gbk')#当路径中含有中文时一定要编码之后才能被walk函数正确使用outfile="D:/binaries.dat"suffix = ".c|.cpp"encrypt(dir,outfile,suffix,1)

这两个函数的功能是遍历一个目录下指定后缀名的文件,并将其重命名,之后将改变记录到log文件,待下次恢复时使用。

主要问题出现在dir变量,当里面含有中文字符时,不会报错,但是不会进入for root, dirs, files in os.walk(dir): 循环体,调了好久才发现这个问题,一开始就忽略了参数的编码问题。后来意识到编码后,纠结了好久才调正确,归结起来有以下几点需要注意:

windows中一般需要gbk编码来与python的默认编码(unicode,python3系列我还没有尝试)进行转换;

在上面的函数中,所位于的python文件编码为utf-8(# -*- coding: UTF-8 -*-),所以参数dir变量需要先decode(’utf-8’),然后encode(’gbk’),decode可以省略;

当然在encrypt()函数中print时若需要看到正确的中文需要decode(’gbk’)。

最后一点教训是,还是把编码问题,尤其是python2.x的编码搞清楚再去勇敢地使用中文吧,哎…

转载于:https://www.cnblogs.com/sumory/archive/2011/01/26/1945521.html

纠结的Python2.7编码与os.walk()函数的目录参数相关推荐

  1. Python使用os.listdir()函数来得目录内容的介绍

    转载:http://www.cnblogs.com/100thMountain/p/4769238.html Python使用os.listdir()函数来得目录内容的介绍 Python编程语言是计算 ...

  2. os.walk获取同级目录具有随机性

    1.在不同机器上,相同内容的目录和文件,os.walk获取结果中路径的先后顺序具有随机性. 2.查看os.walk源码得知,listdir具有随机性. 3.修改该源码,对listdir结果排序后,使得 ...

  3. python的os.walk()函数的使用及对于root,dirs,files的理解

    版权声明:转载请注明作者(独孤尚良dugushangliang)出处: https://blog.csdn.net/dugushangliang/article/details/90072063 关于 ...

  4. Python中的os.mkdir()函数

    Python中的os.mkdir()函数 声明 本文转载自毛毛打死小怪兽的文章 1. 创建目录 在Python中可以使用os.mkdir()函数创建目录(创建一级目录). 其原型如下所示: os.mk ...

  5. Python之os.walk()与os.path.walk()

    一.os.walk() 函数声明:walk(top,topdown=True,οnerrοr=None) 1>参数top表示需要遍历的目录树的路径 2>参数topdown的默认值是&quo ...

  6. linux link path walk,python之os.walk()与os.path.walk()

    来源:http://xukaizijian.blog.163.com/blog/#m=0&t=1&c=fks_0840670930850830700860870870950850810 ...

  7. python 打开路径下文件_Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法...

    在python3.6版本中去掉了os.path.walk()函数 os.walk() 函数声明:walk(top,topdown=True,oneerror=None) 1.参数top表示需要遍历的目 ...

  8. python excelwriter保存路径_python管理文件神器 os.walk

    点击上方"机器学习与生成对抗网络",关注"星标" 获取有趣.好玩的前沿干货! 来源:诡途 https://blog.csdn.net/qq_35866846/a ...

  9. python 抓取目录树_python 获取文件下所有文件或目录os.walk()的实例

    在python3.6版本中去掉了os.path.walk()函数 os.walk() 函数声明:walk(top,topdown=True,oneerror=None) 1.参数top表示需要遍历的目 ...

最新文章

  1. python基础知识8——常见内置模块
  2. 47_pytorch循环神经网络(学习笔记)
  3. 2014多校第一场A题 || HDU 4861 Couple doubi
  4. 只要一点点力气就可以撬起重物?
  5. redis实例python_生产消费者模式与python+redis实例运用(基础篇)
  6. C#中的函数参数能不能有默认值的解决方法
  7. 【Java虚拟机】运行时数据区
  8. IS-IS和OSPFv2对比
  9. 服务器器ip的A段B段C段是什么意思有什么意义
  10. 游程编码用matlab实现代码_二值图像游程编码算法的Matlab实现 -
  11. 5-0 51单片机流水灯
  12. 使用VSCode拉取代码报错would clobber existing tag
  13. 白杨SEO:什么是产品运营?产品运营要求有哪些?SEO如何转行产品运营?
  14. ____x86 xor 指令
  15. matlab如何求矩阵特征值
  16. word-wrap html,word-wrap
  17. Floyd算法的应用
  18. symfony简单的博客练习,熟悉具体开发流程
  19. 黑客黑了自己!恶意软件开发者不小心感染了自己的 PC,致数据泄漏
  20. Android基础入门教程——10.4 Vibrator(振动器)

热门文章

  1. linux下软件编译终止,[2018年最新整理]linux下编译运行程序命令大全.ppt
  2. 如何利用OpenCV寻找轮廓的中心?
  3. 蓝牙模块引起电路干扰
  4. 调试来自于逐飞的MM32F3277移植有MicroPython开发板
  5. 2021年春季学期-信号与系统-第十一次作业参考答案-第二小题
  6. 2021年春季学期-信号与系统-第五次作业参考答案-第十一移小题—MATLAB
  7. 室外电磁赛道铺设补充说明
  8. cmd文件打开闪退_批处理闪退、运行中断等问题的处理
  9. 镗孔指令g76格式_11种孔加工固定循环指令+1个案例=完美解决孔加工问题
  10. java语言程序设计考点_计算机二级考试Java语言程序设计考点:关键字