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 相关文章推荐
Django实现的自定义访问日志模块示例
Jun 23 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
详解Python正则表达式re模块
Mar 19 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
Apr 15 Python
Python绘制动态水球图过程详解
Jun 03 Python
tensorflow 动态获取 BatchSzie 的大小实例
Jun 30 Python
浅谈优化Django ORM中的性能问题
Jul 09 Python
python将字典内容写入json文件的实例代码
Aug 12 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 Python
Django如何与Ajax交互
Apr 29 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
PHP中图片等比缩放的实例
2013/03/24 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
Laravel 框架路由原理与路由访问实例分析
2020/04/14 PHP
prototype class详解
2006/09/07 Javascript
IE8 中使用加速器(Activities)
2010/05/14 Javascript
如何用js控制frame的隐藏或显示的解决办法
2013/03/20 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
AngularJs Injecting Services Into Controllers详解
2016/09/02 Javascript
手把手搭建安装基于windows的Vue.js运行环境
2017/06/12 Javascript
详解Vue组件实现tips的总结
2017/11/01 Javascript
Vue2仿淘宝实现省市区三级联动
2020/04/15 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
js之切换全屏和退出全屏实现代码实例
2019/09/09 Javascript
JavaScript直接调用函数与call调用的区别实例分析
2020/05/22 Javascript
python中解析json格式文件的方法示例
2017/05/03 Python
详解Python中where()函数的用法
2018/03/27 Python
py-charm延长试用期限实例
2019/12/22 Python
python 使用递归实现打印一个数字的每一位示例
2020/02/27 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
python实现批量修改文件名
2020/03/23 Python
Tensorflow加载Vgg预训练模型操作
2020/05/26 Python
python的pip有什么用
2020/06/17 Python
Python 排序最长英文单词链(列表中前一个单词末字母是下一个单词的首字母)
2020/12/14 Python
纯css3实现鼠标经过图片显示描述的动画效果
2014/09/01 HTML / CSS
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
《搭石》教学反思
2014/04/07 职场文书
创意婚礼策划方案
2014/05/18 职场文书
会议室使用管理制度
2015/08/06 职场文书
2015年秋学期教研工作总结
2015/10/14 职场文书
2016年公务员六五普法心得体会
2016/01/21 职场文书
MySQL的存储过程和相关函数
2022/04/26 MySQL