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使用chardet判断字符串编码的方法
Mar 13 Python
python获取指定网页上所有超链接的方法
Apr 04 Python
深入解析Python中的urllib2模块
Nov 13 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 Python
python抓取文件夹的所有文件
Feb 27 Python
python3利用Socket实现通信的方法示例
May 06 Python
通过python3实现投票功能代码实例
Sep 26 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
Python 从attribute到property详解
Mar 05 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
Pyinstaller 打包发布经验总结
Jun 02 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 采集程序 常用函数
2008/12/18 PHP
php 强制下载文件实现代码
2013/10/28 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
又一个图片自动缩小的JS代码
2007/03/10 Javascript
js获取IP地址的方法小结
2014/07/01 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
设置点击文本框或图片弹出日历控件的实现代码
2016/05/12 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
jQuery源码分析之sizzle选择器详解
2017/02/13 Javascript
angular中实现控制器之间传递参数的方式
2017/04/24 Javascript
node.js连接MongoDB数据库的2种方法教程
2017/05/17 Javascript
深入探究angular2 UI组件之primeNG用法
2017/07/26 Javascript
JS代码实现电脑配置检测功能
2018/03/21 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
angular6.x中ngTemplateOutlet指令的使用示例
2018/08/09 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
微信小程序--获取用户地理位置名称(无须用户授权)的方法
2019/04/29 Javascript
原生JavaScript实现换肤
2021/02/19 Javascript
跟老齐学Python之关于循环的小伎俩
2014/10/02 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
2016/06/14 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Python3 列表,数组,矩阵的相互转换的方法示例
2019/08/05 Python
利用Bootstrap实现漂亮简洁的CSS3价格表实例源码
2017/03/02 HTML / CSS
简单介绍HTML5中audio标签的使用
2015/09/24 HTML / CSS
HTML5中的Web Notification桌面右下角通知功能的实现
2018/04/19 HTML / CSS
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
心理学专业毕业生推荐信范文
2013/11/21 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
2014乡镇领导班子四风对照检查材料思想汇报
2014/10/05 职场文书
一年级班主任工作总结2014
2014/11/08 职场文书
董事长秘书岗位职责
2015/02/13 职场文书
2016年学校禁毒宣传活动工作总结
2016/04/05 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
Win11怎么跳过联网验机 ?Win11跳过联网验机激活教程
2022/04/05 数码科技
MySQL导致索引失效的几种情况
2022/06/25 MySQL