Python处理utf-8 添加和删除BOM头

以下代码只处理了assic和utf8文件。其它文件编码为保险起见并未加入支持。
参数
exts 需要处理文件的扩展名
folders 需要处理的文件夹及子目录
处理目录为当前目录
运行:
添加bom头
python proc_bom.py
删除bom头
python proc_bom.py -r

运行缺少chardet报错 请查看:http://www.cnblogs.com/wangmh/p/8004451.html

 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);

 

转载于:https://www.cnblogs.com/wangmh/p/8005388.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值