Python处理utf-8 添加和删除BOM头
以下代码只处理了assic和utf8文件。其它文件编码为保险起见并未加入支持。
参数
exts 需要处理文件的扩展名
folders 需要处理的文件夹及子目录
处理目录为当前目录
运行:
添加bom头
python proc_bom.py
删除bom头
python proc_bom.py -r
运行缺少chardet报错
方法1:在线安装
pip install chardet
方法2:离线安装
https://github.com/chardet/chardet
https://pypi.python.org/pypi/chardet#downloads
去下载chardet包
进入到chardet 3.0.4 的解压包里,执行:python setup.py install 就可以完成安装了。
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 import os;
5 import sys;
6 import codecs;
7 import chardet;
8
9 #获取脚本文件的当前路径
10 def cur_file_dir():
11 #获取脚本路径
12 path = sys.path[0]
13 #判断为脚本文件还是py2exe编译后的文件,如果是脚本文件,则返回的是脚本的目录,如果是py2exe编译后的文件,则返回的是编译后的文件路径
14 if os.path.isdir(path):
15 return path
16 elif os.path.isfile(path):
17 return os.path.dirname(path)
18 #打印结果
19
20
21 #pip install chardet 安装相应插件
22 def procBOM(strPath,curLen, bAdd):
23 newcontent = '';
24 f = open(strPath, "rb");
25 fcontent = f.read();
26 f.close();
27 printBuffer = strPath[curLen:]
28 codeType = chardet.detect(fcontent)["encoding"] #检测编码方式
29 printBuffer = printBuffer + " "+str(codeType)
30
31 if codeType.lower().find('utf-8') == -1 and codeType.lower().find('ascii') == -1 :
32 #非utf8文件保险起见先退出,并输出错误提示,todo后续再添加其它转码到utf8
33 print printBuffer + " error OK"
34 return
35
36 #不需要转换,已经添加bom头
37
38 if bAdd and fcontent[:3] != codecs.BOM_UTF8:
39 print printBuffer+" add bom",
40 newcontent = codecs.BOM_UTF8;
41 newcontent += fcontent;
42 elif not bAdd and fcontent[:3] == codecs.BOM_UTF8:
43 newcontent = fcontent[3:];
44 print printBuffer+" del bom",
45 else:
46 return;
47 fnew = open(strPath, "wb+")
48 fnew.write(newcontent);
49 fnew.close();
50 print "done"
51 return
52
53 if __name__ == "__main__":
54
55 bAdd = True;
56 exts = ['.h', '.c', '.cpp'];
57 folders = ["GNaviInterface/search","src","tester"]
58 bAdd = True;
59 if(len(sys.argv) > 1 and sys.argv[1] == '-r'):
60 bAdd = False;
61 curLen = len(cur_file_dir())
62 for folderName in folders:
63 folderPath = cur_file_dir()+"/"+folderName+"/"
64 #print "procBOM:folder path = "+folderPath+",add = "+str(bAdd)
65 for parent,dirnames,filenames in os.walk(folderPath):
66 for f in filenames:
67 bTargetFile = False;
68 for e in exts:
69 if(f.endswith(e)):
70 bTargetFile = True;
71 if(bTargetFile):
72 procBOM(os.path.join(parent,f),curLen, bAdd);
73 #print 'file:%s add:%s' % (os.path.join(parent, f), bAdd);
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }
Python处理utf-8 添加和删除BOM头的更多相关文章
- 检测文件是否有BOM 头,并删除BOM头(php)
将下面文件放在网站根目录访问即可,它会遍历当前目录下所有子目录,检测文件是否含有BOM头,并删除BOM头 <?php //remove the utf-8 boms //by magicbug ...
- python对MySQL进行添加修改删除以及字符串的操作
# coding=UTF-8 import MySQLdb def dbDperate(sql,param): "定义数据库的添加,修改和删除操作" #获取数据库的连接对象 con ...
- 删除UTF-8 BOM头的GUI小工具
经常看到PHP群里有人因为UTF-8的BOM头出现这样那样的问题,给出的一个PHP删除BOM头的程序,新手也不会用,所以用wxpython写了一 个GUI,直接选择文件夹路径,就可以将该文件夹下所有指 ...
- linux下查找包含BOM头的文件和清除BOM头命令
查找包含BOM头的文件,命令如下: grep -r -I -l $'^\xEF\xBB\xBF' ./ 这条命令会查找当前目录及子目录下所有包含BOM头的文件,并把文件名在屏幕上输出. 但 ...
- python全栈开发day61-django简单的出版社网站展示,添加,删除,编辑(单表的增删改查)
day61 django内容回顾: 1. 下载: pip install django==1.11.14 pip install -i 源 django==1.11.14 pycharm 2. 创建项 ...
- Python实现单链表数据的添加、删除、插入操作
Python实现单链表数据的添加.删除.插入操作 链表的定义: 链表(linked list)是由一组被称为结点的数据元素组成的数据结构,每个结点都包含结点本身的信息和指向下一个结点的地址.由于每个结 ...
- ORM简介 单表添加修改删除表记录
---------------------------------------------------------------目标既定,在学习和实践过程中无论遇到什么困难.曲折都不灰心丧气,不轻易改变 ...
- Ansible 从MySQL数据库添加或删除用户
mysql_user - 从MySQL数据库添加或删除用户. 概要 要求(在执行模块的主机上) 选项 例子 笔记 状态 支持 概要 从MySQL数据库添加或删除用户. 要求(在执行模块的主机上) My ...
- Ansible 从远程主机添加或删除MySQL数据库
mysql_db - 从远程主机添加或删除MySQL数据库. 概要 要求(在执行模块的主机上) 选项 例子 笔记 状态 支持 概要 从远程主机添加或删除MySQL数据库. 要求(在执行模块的主机上) ...
随机推荐
- Codeforces 1149C - Tree Generator™(线段树+转化+标记维护)
Codeforces 题目传送门 & 洛谷题目传送门 首先考虑这个所谓的"括号树"与直径的本质是什么.考虑括号树上两点 \(x,y\),我们不妨用一个"DFS&q ...
- 数据仓库和数据集市:ODS、DW、DWD、DWM、DWS、ADS
@ 目录 数据流向 何为数仓DW 主要特点 与数据库的对比 为何要分层 数据分层 数据运营层ODS 数据仓库层 数据细节层DWD 数据中间层DWM 数据服务层DWS(DWT) 数据应用层ADS 事实表 ...
- Markdown 目录
Markdown 目录 1. TOC TOC 全称为 Table of Content,自动列出全部标题. 用法: [toc] 在 Markdown 中,自动生成目录非常简单,只需要在恰当的位置添加 ...
- 监督学习&非监督学习
监督学习 1 - 3 - Supervised Learning 在监督学习中,数据集中的每个例子,算法将预测得到例子的""正确答案"",像房子的价格,或者溜 ...
- 云原生PaaS平台通过插件整合SkyWalking,实现APM即插即用
一. 简介 SkyWalking 是一个开源可观察性平台,用于收集.分析.聚合和可视化来自服务和云原生基础设施的数据.支持分布式追踪.性能指标分析.应用和服务依赖分析等:它是一种现代 APM,专为云原 ...
- day11 系统安全
day11 系统安全 复习总结 文件 1.创建 格式:touch [路径] [root@localhost ~]# touch 1.txt # 当前路径创建 [root@localhost ~]# t ...
- LeetCode1579题——圆圈中最后剩下的数字
1.题目描述:0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字.求出这个圆圈里剩下的最后一个数字.例如,0.1.2.3.4这5个数字组成一个圆圈,从数字0开始每次删 ...
- Linux学习 - IP地址配置
1 首先选择桥接模式 2 配置IP.子网掩码.网关.DNS setup 本例中使用的是无线网连接, IP地址: 192.168.3.195 子网掩码: 255.255.255.0 网关: 192. ...
- Linux学习 - 关机重启退出命令
一.shutdown 1 功能 关机.重启操作 2 语法 shutdown [-chr] [时间选项] -h 关机 -r 重启 -c 取消前一个关机命令 二.halt.poweroff(关机) 三 ...
- 【JAVA今法修真】 第一章 今法有万象 百家欲争鸣
大家好,我是南橘,因为这段时间很忙,忙着家里的事情,忙着工作的事情,忙着考试的事情,很多时候没有那么多经历去写新的东西,同时,也是看了网上一些比较新颖的文章输出方式,自己也就在想,我是不是也可以这样写 ...