python实现文件批量编码转换及注意事项


Posted in Python onOctober 14, 2019

起因:大三做日本交换生期间在修一门C语言图像处理的编程课,在配套书籍的网站上下载了sample,但是由于我用的ubuntu18.04系统默认用utf-8编码,而文件源码是Shift_JIS编码,因而文档注释是乱码。在不改变系统默认编码的前提下,用python将'.c'和'.h'文件的编码转换保存新的文件夹,其余文件原封不动复制。

import os
abspath = "/home/fanghaoyu/桌面/libraries/" # 新文件夹的路径
try:
  os.makedirs(abspath) # 创建新文件夹
except FileExistsError:
  pass
a = [] # 定义列表a,用来存放原文件的路径
b = [] # 定义列表b,用来存放新文件的路径
# 函数用来递归获取文件,更改编码写入到新文件夹中,如果不是.c和.h文件则复制
def get_file_name(path1, path2):
  for i in os.listdir(path1):
    if os.path.isdir(os.path.join(path1, i)):
      try:
        os.makedirs(os.path.join(path2, i))
      except FileExistsError:
        pass
      get_file_name(os.path.join(path1, i), os.path.join(path2, i))
    else:
      a.append(os.path.join(path1, i))
      b.append(os.path.join(path2, i))
      if a[-1].endswith('.c') or a[-1].endswith('.h'):
        with open(a[-1], 'r', encoding='Shift_JIS') as fp:
          s = fp.read()
          with open(b[-1], 'w') as fp2:
            fp2.write(s)
            fp2.close()
      else:
        a[-1] = a[-1].replace(' ', '\ ').replace('(', '\(').replace(')', '\)')
        b[-1] = b[-1].replace(' ', '\ ').replace('(', '\(').replace(')', '\)')
        os.system('cp {} {}'.format(a[-1].strip('\''), b[-1].strip('\'')))
  return 0
get_file_name("/home/fanghaoyu/桌面/prog978-4-7856-3179-6/", abspath)
print(a)
print(len(a))
print(b)
print(len(b))

运行结果如下:

/usr/bin/python3.6 /home/fanghaoyu/桌面/python/coding_change.py
['/home/fanghaoyu/桌面/prog978-4-7856-3179-6/chap06/vq.c', '/home/fanghaoyu/桌面/prog978-4-7856-3179-6/chap06/vqcode.c',...]
1970
['/home/fanghaoyu/桌面/libraries/chap06/vq.c', '/home/fanghaoyu/桌面/libraries/chap06/vqcode.c', ...]
1970
Process finished with exit code 0

需要注意的几点:

open打开原文件,打开方式用'r',则需要设置编码方式encoding='Shift_JIS'

python的os.system()命令中调用ubuntu的shell命令,当cp的文件名中含有' ',  '(',  ')'这三个时,需要在前面加上反斜杠'\',否则会报错

总结

以上所述是小编给大家介绍的python实现文件批量编码转换及注意事项,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
从Python的源码来解析Python下的freeblock
May 11 Python
Python实现定时任务
Feb 08 Python
Python中shutil模块的学习笔记教程
Apr 04 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
利用Python进行异常值分析实例代码
Dec 07 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
python实现微信防撤回神器
Apr 29 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
微信公众号token验证失败解决方案
Jul 22 Python
python3中替换python2中cmp函数的实现
Aug 20 Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 Python
如何查看python关键字
Jan 17 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 #Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
Oct 14 #Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
Oct 14 #Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
Oct 14 #Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
Oct 14 #Python
执行Django数据迁移时报 1091错误及解决方法
Oct 14 #Python
解析Python3中的Import
Oct 13 #Python
You might like
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
2017/03/31 PHP
JQuery从头学起第三讲
2010/07/06 Javascript
jQuery实现用户注册的表单验证示例
2013/08/28 Javascript
js模拟点击以提交表单为例兼容主流浏览器
2013/11/29 Javascript
php+js实现倒计时功能
2014/06/02 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
ECMAScript6函数剩余参数(Rest Parameters)
2015/06/12 Javascript
javascript实现数组中的内容随机输出
2015/08/11 Javascript
获取JS中网页各种高宽与位置的方法总结
2016/07/27 Javascript
javascript实现用户点击数量统计
2016/12/25 Javascript
用file标签实现多图文件上传预览
2017/02/14 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
JavaScript常用进制转换及位运算实例解析
2020/10/14 Javascript
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
python使用7z解压apk包的方法
2015/04/18 Python
Python实现股市信息下载的方法
2015/06/15 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
2017/11/16 Python
python复制列表时[:]和[::]之间有什么区别
2018/10/16 Python
Python函数返回不定数量的值方法
2019/01/22 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
用python3读取python2的pickle数据方式
2019/12/25 Python
Python实现图片查找轮廓、多边形拟合、最小外接矩形代码
2020/07/14 Python
Python编写万花尺图案实例
2021/01/03 Python
团支书的期末学习总结自我评价
2013/11/01 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
2015年前台文员工作总结
2015/05/18 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
springcloud整合seata
2022/05/20 Java/Android