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中的对象拷贝示例 python引用传递
Jan 23 Python
使用Python的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
Python psutil模块简单使用实例
Apr 28 Python
python通过索引遍历列表的方法
May 04 Python
Python3读取zip文件信息的方法
May 22 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
Apr 20 Python
Python实现单词翻译功能
Jun 06 Python
python使用sqlite3时游标使用方法
Mar 13 Python
利用python如何处理百万条数据(适用java新手)
Jun 06 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
Python中return self的用法详解
Jul 27 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 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
剧场版动画《PSYCHO-PASS 3 FIRST INSPECTOR》3月27日日本上映!
2020/03/06 日漫
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
PHP大转盘中奖概率算法实例
2014/10/21 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
javascript 常用功能总结
2012/03/18 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
基于jQuery实现仿微博发布框字数提示
2016/07/27 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
js实现简易计算器功能
2019/10/18 Javascript
微信小程序可滑动周日历组件使用详解
2019/10/21 Javascript
vue cli3 配置proxy代理无效的解决
2019/10/30 Javascript
详解Vue3 Composition API中的提取和重用逻辑
2020/04/29 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python 爬虫一键爬取 淘宝天猫宝贝页面主图颜色图和详情图的教程
2018/05/22 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
vue.js刷新当前页面的实例讲解
2020/12/29 Python
基于HTML5 WebGL的3D机房的示例
2018/03/16 HTML / CSS
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
德国领先的大尺码和超大尺码男装在线零售商:Bigtex
2019/06/22 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
奠基仪式策划方案
2014/05/15 职场文书
标准版离职证明书
2014/09/12 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
2014年初三班主任工作总结
2014/12/05 职场文书
人事局接收函
2015/01/30 职场文书
2015年幼儿园中班工作总结
2015/04/25 职场文书
珍惜时间的诗歌赏析
2019/08/23 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS