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易忽视知识点小结
May 25 Python
Python中字典(dict)合并的四种方法总结
Aug 10 Python
python操作列表的函数使用代码详解
Dec 28 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
在django中实现页面倒数几秒后自动跳转的例子
Aug 16 Python
python set集合使用方法解析
Nov 05 Python
python实现简单颜色识别程序
Feb 19 Python
django-xadmin根据当前登录用户动态设置表单字段默认值方式
Mar 13 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python中把元组转换为namedtuple方法
Dec 09 Python
用Python提取PDF表格的方法
Apr 11 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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学习资料汇总与网址
2007/03/16 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
javascript中的对象和数组的应用技巧
2007/01/07 Javascript
[JS源码]超长文章自动分页(客户端版)
2007/01/09 Javascript
基于jquery的bankInput银行卡账号格式化
2012/08/22 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
jQuery中:selected选择器用法实例
2015/01/04 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
Bootstrap中的Panel和Table全面解析
2016/06/13 Javascript
BootStrap selectpicker
2016/06/20 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
通过BootStrap实现轮播图的实际应用
2016/09/26 Javascript
JQuery 动态生成Table表格实例代码
2016/12/02 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
vue.js实现照片放大功能
2020/06/23 Javascript
[15:58]DOTA2国际邀请赛采访专栏:Tongfu.Sansheng&KingJ,DK.rOtk
2013/08/08 DOTA
[49:58]完美世界DOTA2联赛PWL S3 Magma vs DLG 第一场 12.18
2020/12/19 DOTA
CentOS安装pillow报错的解决方法
2016/01/27 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
2016/07/11 Python
kafka-python批量发送数据的实例
2018/12/27 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
在求职信中如何凸显个人优势
2013/10/30 职场文书
自我评价怎么写正确呢?
2013/12/02 职场文书
yy结婚证婚词
2014/01/10 职场文书
安全生产投入制度
2014/01/29 职场文书
《颐和园》教学反思
2014/02/26 职场文书
办公自动化专业大学生职业规划书
2014/03/06 职场文书
详解php中流行的rpc框架
2021/05/29 PHP
Python3的进程和线程你了解吗
2022/03/16 Python