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 pickle 和 shelve模块的用法
Sep 16 Python
python字符串连接方式汇总
Aug 21 Python
python实现矩阵乘法的方法
Jun 28 Python
python 采集中文乱码问题的完美解决方法
Sep 27 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
windows上安装Anaconda和python的教程详解
Mar 28 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Python基于OpenCV实现人脸检测并保存
Jul 23 Python
python使用sklearn实现决策树的方法示例
Sep 12 Python
使用Python实现正态分布、正态分布采样
Nov 20 Python
python获取网络图片方法及整理过程详解
Dec 20 Python
python 弧度与角度互转实例
Apr 15 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 将bmp图片转为jpg等其他任意格式的图片
2009/06/21 PHP
php在线代理转向代码
2012/05/05 PHP
php常见的魔术方法详解
2014/12/25 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
可兼容php5与php7的cURL文件上传功能实例分析
2018/05/11 PHP
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
纯文字版返回顶端的js代码
2013/08/01 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
2015/11/17 Javascript
vue弹窗组件使用方法
2018/04/28 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
JavaScript函数式编程(Functional Programming)高阶函数(Higher order functions)用法分析
2019/05/22 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
js实现登录拖拽窗口
2020/02/10 Javascript
javascript实现贪吃蛇经典游戏
2020/04/10 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
Python字符遍历的艺术
2008/09/06 Python
python开发之list操作实例分析
2016/02/22 Python
python正则表达式之作业计算器
2016/03/18 Python
python简单实例训练(21~30)
2017/11/15 Python
通过Python编写一个简单登录功能过程解析
2019/09/04 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
详解Ubuntu环境下部署Django+uwsgi+nginx总结
2020/04/02 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
python 装饰器的使用示例
2020/10/10 Python
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
餐饮管理自我介绍信
2014/01/15 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
节能标语大全
2014/06/21 职场文书
幼师小班个人总结
2015/02/12 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
杨善洲电影观后感
2015/06/04 职场文书
三八节活动简报
2015/07/20 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python