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使用xauth方式登录饭否网然后发消息
Apr 11 Python
探究Python多进程编程下线程之间变量的共享问题
May 05 Python
详解python单例模式与metaclass
Jan 15 Python
shelve  用来持久化任意的Python对象实例代码
Oct 12 Python
Python学习之Anaconda的使用与配置方法
Jan 04 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
python 用opencv调用训练好的模型进行识别的方法
Dec 07 Python
Python实现时间序列可视化的方法
Aug 06 Python
Python实现剪刀石头布小游戏(与电脑对战)
Dec 31 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
Python通过loop.run_in_executor执行同步代码 同步变为异步
Apr 11 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
如何开始收听短波广播
2021/03/01 无线电
ZF框架实现发送邮件的方法
2015/12/03 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
PHP设计模式之迭代器模式Iterator实例分析【对象行为型】
2020/04/26 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
jquery用offset()方法获得元素的xy坐标
2014/09/06 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
Mongoose学习全面理解(推荐)
2017/01/21 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
js实现无缝滚动双图切换效果
2019/07/09 Javascript
layUI实现三级导航菜单效果
2019/07/26 Javascript
Vue循环遍历选项赋值到对应控件的实现方法
2020/06/22 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
Python中操作MySQL入门实例
2015/02/08 Python
Python实现单词拼写检查
2015/04/25 Python
python中迭代器(iterator)用法实例分析
2015/04/29 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
2018/02/11 Python
python 解压pkl文件的方法
2018/10/25 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
Python如何使用正则表达式爬取京东商品信息
2020/06/01 Python
filter使用python3代码进行迭代元素的实例详解
2020/12/03 Python
详解css3中的伪类before和after常见用法
2020/11/17 HTML / CSS
跑鞋、网球鞋、网球拍、服装及装备:Holabird Sports
2016/09/19 全球购物
七年级政治教学反思
2014/02/03 职场文书
一句话工作感言
2014/03/01 职场文书
授权委托书范本
2014/04/03 职场文书
2014财务年终工作总结
2014/12/08 职场文书
信用卡工资证明范本
2015/06/19 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python