#功能:国际化测试,用于提取应用设计包中的中文字符,并输出report
#解压---筛选---整理路径---提取中文---输出报告

#################################################################
#author: 陈月白
#_blogs: http://www.cnblogs.com/chenyuebai/
################################################################# #功能:国际化测试,用于提取应用设计包中中文字符,并输出report
#yuebai 20160328
#解压---筛选---整理路径---提取中文---输出报告 #-*- coding: utf-8 -*- import os
import shutil
import sys
import re
import zipfile
import glob workPath = "C:\\users\\yuebai\\Desktop\\国际化测试包"
reportPath = "C:\\users\\yuebai\\Desktop\\国际化输出报告" #定义日志函数
def logInfo(info):
log = open("%s\\run.log"%workPath,"a")
log.write("[Info] %s\n"%info)
log.close() #定义解压文件函数
def extractZip(fileName,extraPath):
f = zipfile.ZipFile(fileName,"r")
f.extractall(extraPath)
f.close()
logInfo("%s文件解压完成"%fileName) #功能函数,找出中文字符
def getChinese(fileFullPath):
isChinese = re.compile("([\u4e00-\u9fa5]+)+?")
f = open(fileFullPath,"r",encoding="UTF-8") #打开待提取文件
f_in = open("%s\\chineseTxt.txt"%reportPath,"a") #打开输出文件 for line in f.readlines():
getStr = isChinese.findall(str(line)) #逐行判断提取中文
if not getStr == []:
f_in.write("发现中文字符(╯' - ')╯︵ ┻━┻ ,文件路径为%s\n"%fileFullPath)
f_in.write("%s\n"%line) f.close()
f_in.close() logInfo("查找完成,输出报告路径:%s"%reportPath) #功能函数,列出路径下所有文件
def listAny(workPath):
if not os.path.exists(workPath):
print("Error,no such dictionary%s,plz check"%workPath)
zipList = os.listdir(workPath)
return zipList #删除非zip类型的包
notZipList = glob.glob("%s\\*[!p]"%workPath)
logInfo("notZipList =%s,prepare to delete"%notZipList)
for i in notZipList:
os.remove(i)
logInfo("删除非zip包完成") #获取zip包列表
zipList = listAny(workPath) #取zip包解压
#print("开始提取")
for zipPackage in zipList:
zipName = os.path.split(zipPackage)[0] #切割获取文件名
extraPath = os.path.join(workPath,zipName) #在当前文件夹下创建和zip包同名文件夹,用以做解压目标路径
os.makedirs(extraPath)
logInfo("构造解压路径完成,extraPath =%s"%extraPath) extraFilePath = os.path.join(workPath,zipPackage) #待解压文件绝对路径 #开始解压zip包,完成后删除源zip文件
extractZip(extraFilePath, extraPath)
os.remove(extraFilePath) #将扩展目录下流程文件汇总至\\plan下
if os.path.exists("%s\\Plans\\Extend"%extraPath):
tmpExtendPath = ("%s\\Plans\\Extend"%extraPath)
tmpPlanPath = ("%s\\Plans"%extraPath) for t in os.listdir(tmpExtendPath):
t_FullPath = ("%s\\%s\\"%(tmpExtendPath,t))
#print("t_FullPath =",t_FullPath)
if os.path.isfile(t_FullPath):
shutil.move(t_FullPath,tmpPlanPath) #调用getChinese,提取中文字符
for y in os.listdir(tmpPlanPath):
y_fullPath = os.path.join(tmpPlanPath,y)
#print(y_fullPath) logInfo("开始检查文件%s,检查结果路径:%s"%(y_fullPath,reportPath))
getChinese(y_fullPath) #剔除注释
f_in = open("%s\\chineseTxt.txt"%reportPath,"r") #全部中文文件
f_comment = open("%s\\comment.txt"%reportPath,"a") #打开待写入注释文件
f_result = open("%s\\result.txt"%reportPath,"a") #结果文件 for line in f_in.readlines():
if re.findall("^//.*",line):
f_comment.write("%s\n"%line)
else:
f_result.write("%s\n"%line) f_in.close()
f_comment.close()
f_result.close() print("提取完成,结果路径:%s"%reportPath)

使用Python提取中文字符的更多相关文章

  1. python处理中文字符

    1.在py文件中使用中文字符 unicode.py文件内容如下所示: # -*- coding:utf-8 -*- str_ch = '我们women' uni_ch = u'我们women' pri ...

  2. [python]有中文字符程序异常的解决方案

    一. 含有中文字符无法运行 在python3中用的是Unicode编码,Unicode号称万国码,可以向所有的编码进行兼容.不会出现这种问题. Python2中使用的是ASCII编码,会出现这种问题. ...

  3. python 匹配中文字符

    参考: http://hi.baidu.com/nivrrex/blog/item/e6ccaf511d0926888d543071.html           http://topic.csdn. ...

  4. python实现中文字符繁体和简体中文转换-乾颐堂

    需求:把中文字符串进行繁体和简体中文的转换: 思路:引入简繁体处理库,有兴趣的同学可以研究一下内部实现,都是python写的 1.下载zh_wiki.py及langconv zh_wiki.py:ht ...

  5. Python解决中文字符的问题

    from __future__ import unicode_literals print(type("test")) #<type 'unicode'> Chinat ...

  6. python 连接数据库-设置oracle ,mysql 中文字符问题

    import cx_Oracle import MySQLdb def conn_oracle(): cnn = cx_Oracle.connect('用户名','密码','ip:端口号/数据库') ...

  7. python中文字符乱码(GB2312,GBK,GB18030相关的问题)

    转自博主 crifan http://againinput4.blog.163.com/blog/static/1727994912011111011432810/ 在玩wordpress的一个博客搬 ...

  8. Python中文字符的理解:str()、repr()、print

    Python中文字符的理解:str().repr().print 字数1384 阅读4 评论0 喜欢0 都说Python人不把文字编码这块从头到尾.从古至今全研究通透的话是完全玩不转的.我终于深刻的理 ...

  9. 中文字符 unicode转utf-8函数 python实现

    unicode编码范围 00000000-0000007F的字符,用单个字节来表示: 00000080-000007FF的字符用两个字节表示 (中文的编码范围) 00000800-0000FFFF的字 ...

随机推荐

  1. 2016年中国大学生程序设计竞赛(杭州)1006 Four Operations

    Four Operations Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  2. leaflet 利用ajax 将前端地图上的数据post到后台

    生成Google地图,在地图上单击后,将该点的经纬度反馈给后台. 前端HTML代码: <!DOCTYPE html> <html> <head> <meta ...

  3. Grunt打包之seajs项目【转】

    原文:http://www.cnblogs.com/accordion/p/4508154.html grunt与seajs grunt是前端流行的自定义任务的脚手架工具,我们可以使用grunt来为我 ...

  4. js图片延迟加载如何实现

      这里延迟加载的意思是,拖动滚动条时,在图片出现在浏览器显示区域后才加载显示. 大概的实现方式是: 在页面的load没有触发之前,把所有的指定id的元素内的img放入到imgs中,将所有的图片的sr ...

  5. python 3 ---购物车练习

    # -*- coding:utf-8 -*-#Author Chen #定义商品列表List_of_commodities = [ ('Iphone',6888), ('Mac Pro',12888) ...

  6. Spring学习日志之Bean的装配

    Spring容器负责创建应用程序中的bean并通过依赖注入来协调这些对象之间的关系.但是,作为开发人员,要告诉Spring需要创建哪些bean并且如何将其装配在一起.当描述bean如何装配时,Spri ...

  7. linux 安装wordpress 无故往外发送大量垃圾邮件

    linux 安装wordpress 无故往外发送大量垃圾邮件 始末 表现出来的现象就是, 网站运行没多久,mysql服务就挂了,重启也无法启动起来,提示 No such file or dicrion ...

  8. Virtual

    Virtual 作用: 允许在派生类中重新定义与基类同名函数并且可以通过其类的指针或引用来访问基类何派生类的同名函数. 1. 概述简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少 ...

  9. KVM管理平台openebula安装

    1.1opennebula控制台的安装 (如果要添加映像需要给200G以上给/var/lib/one,本文是共享/var/lib/one实现监控,用映像出创建虚拟机原理是从opennebula控制平台 ...

  10. 简单聊聊java中如何判定一个对象可回收

    背景 说到java的特性,其中一个最重要的特性便是java通过new在堆中分配给对象的内存,不需要程序员主动去释放,而是由java虚拟机自动的回收.这也是java和C++的主要区别之一:那么虚拟机是如 ...