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使用cStringIO实现临时内存文件访问的方法
Mar 26 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
Jul 11 Python
Python实现图像的垂直投影示例
Jan 17 Python
Python 爬取必应壁纸的实例讲解
Feb 24 Python
python输出第n个默尼森数的实现示例
Mar 08 Python
使用tensorflow框架在Colab上跑通猫狗识别代码
Apr 26 Python
django 数据库返回queryset实现封装为字典
May 19 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
Jun 03 Python
Python使用jpype模块调用jar包过程解析
Jul 29 Python
python实现取余操作的简单实例
Aug 16 Python
通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
Nov 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
使用 PHPMAILER 发送邮件实例应用
2012/11/07 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
Javascript 面向对象 继承
2010/05/13 Javascript
jQuery基础知识filter()和find()实例说明
2010/07/06 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
jquery使用append(content)方法注意事项分享
2014/01/06 Javascript
jquery移动点击的项目到列表最顶端的方法
2015/06/24 Javascript
JSON相关知识汇总
2015/07/03 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
jQuery grep()方法详解及实例代码
2016/10/30 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
weui上传多图片,压缩,base64编码的示例代码
2020/06/22 Javascript
python3制作捧腹网段子页爬虫
2017/02/12 Python
python实现扫描日志关键字的示例
2018/04/28 Python
Python3实现对列表按元组指定列进行排序的方法分析
2018/12/22 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
pytorch实现从本地加载 .pth 格式模型
2020/02/14 Python
Python识别html主要文本框过程解析
2020/02/18 Python
解决Django Haystack全文检索为空的问题
2020/05/19 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
韩国演唱会订票网站:StubHub韩国
2019/01/17 全球购物
美国最值得信赖的宠物药房:Allivet
2019/03/23 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
技术总监个人的自我评价范文
2013/12/18 职场文书
天鹅的故事教学反思
2014/02/04 职场文书
建筑结构施工求职信
2014/07/11 职场文书
2019年教师节:送给所有老师的祝福语
2019/09/05 职场文书
Python 详解通过Scrapy框架实现爬取CSDN全站热榜标题热词流程
2021/11/11 Python
Java由浅入深通关抽象类与接口(上篇)
2022/04/26 Java/Android