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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
Python守护进程(daemon)代码实例
Mar 06 Python
Python批量查询域名是否被注册过
Jun 21 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python使用sorted排序的方法小结
Jul 28 Python
使用C++扩展Python的功能详解
Jan 12 Python
用python实现刷点击率的示例代码
Feb 21 Python
浅谈python中get pass用法
Mar 19 Python
Python for循环与range函数的使用详解
Mar 23 Python
python 函数中的参数类型
Feb 11 Python
Python实现京东抢秒杀功能
Jan 25 Python
使用scrapy实现增量式爬取方式
Jun 21 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实现插入排序?
2013/04/10 PHP
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
实现PHP中session存储及删除变量
2018/10/15 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
IE和firefox浏览器的event事件兼容性汇总
2009/12/06 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
使用angular写一个hello world
2015/01/23 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记6)
2015/12/20 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
学习掌握JavaScript中this的使用技巧
2016/08/29 Javascript
浅谈JS中的!=、== 、!==、===的用法和区别
2016/09/24 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
html5 canvas 详细使用教程
2017/01/20 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
JS+CSS实现随机点名(实例代码)
2019/11/04 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
python3实现逐字输出的方法
2019/01/23 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
购买瑞典当代设计的腕表和太阳眼镜:TRIWA
2016/10/30 全球购物
Peter Millar官网:美国高档生活服饰品牌
2018/07/02 全球购物
软件毕业生个人鉴定
2014/03/03 职场文书
代领学位证书毕业证书委托书
2014/09/30 职场文书
2014标准社保办理委托书
2014/10/06 职场文书
个人贷款授权委托书样本
2014/10/07 职场文书
抗洪救灾感谢信
2015/01/22 职场文书
索赔员岗位职责
2015/02/15 职场文书
幼儿园新生开学寄语
2015/05/27 职场文书
再次探讨go实现无限 buffer 的 channel方法
2021/06/13 Golang