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的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
Python 26进制计算实现方法
May 28 Python
python 3调用百度OCR API实现剪贴板文字识别
Sep 04 Python
使用 Python 实现微信群友统计器的思路详解
Sep 26 Python
对numpy中二进制格式的数据存储与读取方法详解
Nov 01 Python
Python实现的爬取百度文库功能示例
Feb 16 Python
Python实现钉钉发送报警消息的方法
Feb 20 Python
python统计指定目录内文件的代码行数
Sep 19 Python
python科学计算之narray对象用法
Nov 25 Python
python 实现视频 图像帧提取
Dec 10 Python
python 一维二维插值实例
Apr 22 Python
django和flask哪个值得研究学习
Jul 31 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加入ftp扩展的解决方法
2013/02/07 PHP
codeigniter框架The URI you submitted has disallowed characters错误解决方法
2014/05/06 PHP
PHP数组函数知识汇总
2016/05/12 PHP
js showModalDialog弹出窗口实例详解
2014/01/07 Javascript
文本框水印提示效果的简单实现代码
2014/02/22 Javascript
JavaScript中遍历对象的property的3种方法介绍
2014/12/30 Javascript
JavaScript中的全局对象介绍
2015/01/01 Javascript
jQuery+CSS实现的网页二级下滑菜单效果
2015/08/25 Javascript
Jquery1.9.1源码分析系列(六)延时对象应用之jQuery.ready
2015/11/24 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
node简单实现一个更改头像功能的示例
2017/12/29 Javascript
vue-cli脚手架引入图片的几种方法总结
2018/03/13 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
基于ssm框架实现layui分页效果
2019/07/27 Javascript
vue使用recorder.js实现录音功能
2019/11/22 Javascript
Python使用matplotlib实现在坐标系中画一个矩形的方法
2015/05/20 Python
Python实现拷贝多个文件到同一目录的方法
2016/09/19 Python
对python 判断数字是否小于0的方法详解
2019/01/26 Python
django基础学习之send_mail功能
2019/08/07 Python
python实现图片横向和纵向拼接
2020/03/05 Python
Python如何用wx模块创建文本编辑器
2020/06/07 Python
Html5新增标签与样式及让元素水平垂直居中
2019/07/11 HTML / CSS
美国牛仔品牌:True Religion
2018/11/16 全球购物
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
什么是lambda函数
2013/09/17 面试题
高中体育教学反思
2014/01/24 职场文书
大家检讨书5000字
2014/02/03 职场文书
推广普通话演讲稿
2014/05/23 职场文书
餐饮周年庆活动方案
2014/08/14 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript