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中的random()方法的使用介绍
May 15 Python
Swift中的协议(protocol)学习教程
Jul 08 Python
Python使用PyCrypto实现AES加密功能示例
May 22 Python
Sanic框架安装与简单入门示例
Jul 16 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
基于python指定包的安装路径方法
Oct 27 Python
使用python绘制温度变化雷达图
Oct 18 Python
PyTorch 解决Dataset和Dataloader遇到的问题
Jan 08 Python
python通过安装itchat包实现微信自动回复收到的春节祝福
Jan 19 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
Feb 25 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 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新手上路(十二)
2006/10/09 PHP
自己前几天写的无限分类类
2007/02/14 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
php中__toString()方法用法示例
2016/12/07 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
2017/04/26 PHP
php use和include区别总结
2019/10/13 PHP
laravel 出现command not found问题的解决方案
2019/10/23 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
JavaScript将数组转换成CSV格式的方法
2015/03/19 Javascript
理解js对象继承的N种模式
2016/01/25 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
javascript中BOM基础知识总结
2017/02/14 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
微信小程序 图片宽高自适应详解
2017/05/11 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
ElementUI radio组件选中小改造
2019/08/12 Javascript
vue-cli在 history模式下的配置详解
2019/11/26 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
2020/11/06 Javascript
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
Python中的数据对象持久化存储模块pickle的使用示例
2016/03/03 Python
Python with语句上下文管理器两种实现方法分析
2018/02/09 Python
完美解决python中ndarray 默认用科学计数法显示的问题
2018/07/14 Python
对python中的 os.mkdir和os.mkdirs详解
2018/10/16 Python
python打包exe开机自动启动的实例(windows)
2019/06/28 Python
python 读取修改pcap包的例子
2019/07/23 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
HTML5自定义data-* data(obj)属性和jquery的data()方法的使用
2012/12/13 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
开学典礼感言
2014/02/16 职场文书
如何写好自荐信
2014/04/07 职场文书
环保建议书600字
2014/05/14 职场文书
自荐信格式模板
2015/03/27 职场文书
解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题
2021/07/01 Java/Android
python_tkinter事件类型详情
2022/03/20 Python