免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 10234 | 回复: 3
打印 上一主题 下一主题

去除utf-8文件bom头的py脚本,刚写的,共享下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-28 11:38 |只看该作者 |倒序浏览
我写的有个项目不知道怎么的再上传后文件全加了bom头,一个一个修改起来比较麻烦,所以查了下资料写了个批处理的脚本,共享给大家看看。这个脚本如果在有中文目录的环境下执行可能会有点编码问题,不过一般的程序文件好像没中文目录,哈哈
  1. #coding=utf-8

  2. '''
  3. * 去除指定类型文件的bom头
  4. * 版权所有
  5. * @author      t6760915<t6760915@gmail.com>
  6. * @version     $Id: trim_bom.py $
  7. '''

  8. import os
  9. import sys
  10. import codecs

  11. class TrimBom:
  12.    
  13.     basePath = ''
  14.     fileList = []
  15.     trimExtList = ['php', 'css', 'js', 'py', 'pl', 'html', 'htm']

  16.     #去除字符串中的bom部分
  17.     def trim_bom(self, str):
  18.         if not str:
  19.             return ''
  20.         
  21.         if len(str) < 3:
  22.             return ''
  23.         
  24.         if str[:3] == codecs.BOM_UTF8:
  25.             return str[3:]
  26.         
  27.         return str

  28.     #去除某文件的bom头
  29.     def trim_file_bom(self, fileName):
  30.         if not fileName:
  31.             return False
  32.         
  33.         if not os.path.exists(fileName):
  34.             return False

  35.         try:
  36.             fp = open(fileName, 'r')
  37.             html_sourse = fp.read()
  38.             fp.close()
  39.         except:
  40.             return False

  41.         html_result = self.trim_bom(html_sourse)

  42.         if html_result == html_sourse:
  43.             return False

  44.         try:
  45.             fp = open(fileName, 'w')
  46.             fp.write(html_result)
  47.             fp.close()
  48.         except:
  49.             return False

  50.         return True

  51.     #获取指定类型文件名列表
  52.     def getFileListByExt(self, path):
  53.         if not path:
  54.             return False

  55.         path = os.path.normpath(path)

  56.         if not os.path.exists(path):
  57.             return False

  58.         if os.path.isfile(path) and path.split('.')[-1] in self.trimExtList:
  59.             trimFlag = self.trim_file_bom(path)

  60.             if trimFlag:
  61.                 print 'process %s success...' % path.replace(self.basePath, '').replace('\\', '/')
  62.             
  63.         elif os.path.isdir(path):
  64.             fileNameList = os.listdir(path)
  65.             for fileName in fileNameList:
  66.                 fileName = os.path.normpath('%s/%s' % (path,fileName))
  67.                 self.getFileListByExt(fileName)
  68.         
  69.         return False

  70.     #运行函数入口
  71.     def run(self, path):
  72.         self.basePath = os.path.normpath(path)
  73.         self.getFileListByExt(path)

  74. if __name__ == '__main__':
  75.     if len(sys.argv) < 2:
  76.         print 'USEAGE:python %s dirName' % __file__
  77.         sys.exit(0)
  78.    
  79.     tObj = TrimBom()
  80.     tObj.run(sys.argv[1])
复制代码
trim_bom.rar (971 Bytes, 下载次数: 126)

评分

参与人数 1可用积分 +5 收起 理由
2gua + 5 原创内容

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2010-05-28 12:47 |只看该作者
不错啊,原创内容,开源精神,值得赞扬。

论坛徽章:
0
3 [报告]
发表于 2010-05-28 13:23 |只看该作者
本帖最后由 luffy.deng 于 2010-05-28 13:29 编辑

  1.         if not fileName:
  2.             return False
  3.         
  4.         if not os.path.exists(fileName):
  5.             return False

  6.         try:
  7.             fp = open(fileName, 'r')
  8.             html_sourse = fp.read()
  9.             fp.close()
  10.         except:
  11.             return False
复制代码
t6760915 发表于 2010-05-28 11:38

既然做异常处理  前面两个if 不是多余么。 另外如果子目录下的文件也要处理就不如用walk了 省得isdir  isfile 的判断了。

论坛徽章:
0
4 [报告]
发表于 2010-05-28 13:31 |只看该作者
既然做异常处理  前面两个if 不是多余么。 另外如果子目录下的文件也要处理就不如用walk了 省得isdir  is ...
luffy.deng 发表于 2010-05-28 13:23



    看了你的建议还是将前面两个处理去掉的好,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP