2005年05月27日 星期五 08:08
1. 正则表达式[.]无法匹配中文, 这是问题码? import re >>> m = re.match("[.]*", ";测试") >>> print m <_sre.SRE_Match object at 0x008E4368> >>> m.group() '' 2. 如何直接使用python来实现复杂的数据结构,如树, 现在在写个小应用程序时, 需要建立一颗树, 以用来统计建立文件系统时目录的空间大小, 请问那里有相关的库, 或样例代码, 我是从C过来的, 所以使用python还不是很习惯, 看看下面的代码就知道了, 帮忙指点有那些是可以使用python来进一步改进 """ Check Script Tools. 用来检验Script的正确性, 也用于正确设置统计目录空间的大小 """ import os import copy import re import string # 去掉一些无效的串 def tripLine(srcStr): """ srcList is String, if should trip """ srcStr = string.upper(srcStr) if re.match("^[ \t\n]*$", srcStr): return "" # 空行 m = re.match("^[ \t]*[^;]*;", srcStr) if m: # 批处理中的注释, 这里只处理使用;开头的注释 srcStr = m.group()[0 : -1] # 去掉剩下的; m = re.match("[^\(]*\(", srcStr) if m: srcStr = m.group()[0 : -1] # 去掉 状态字 m = re.findall("[\d\w]+", srcStr) srcStr = "" for x in m: srcStr = srcStr + x # 去掉串中的空格和\t return srcStr # 将文件内容转换为一个串的列表 def fileToList(destList, fileName): """ Read file and translate to lines. """ try: fp = open(fileName, "r") except IOError: print "Cannot Open FIle ", fileName raise IOError st = [] readStr = "" lineNum = int(1) readStr = fp.readline() st = [lineNum, readStr] while readStr: st[0] = lineNum st[1] = tripLine(readStr) if st[1]: destList.append(copy.deepcopy(st)) else: pass lineNum = lineNum + 1 readStr = fp.readline() fp.close() return # 错误信息串 __staticErrorStr = ( "Not ERROR", # 0x00 "P3 ERROR", # 0x01 "APDU Too Short", # 0x02 "Data Length is not Even", # 0x03 "CLA ERROR, must A0 or C0", # 0x04 "INS ERROR" # 0x05 ) # 打印错误信息 def __printErrorMsg(errorNum, lNum): global __staticErrorStr print "Incorrect APDU, Line %d\tReason: %s" %(lNum, __staticErrorStr[errorNum]) def __isCorrectCLA(CLA, lNum): if (CLA == "A0") or (CLA == "C0"): return else: __printErrorMsg(0x04, lNum) def __isCorrectINS(INS, lNum): if 1: return else: __printErrorMsg(0x05, lNum) # 十六进制数值转换用表 __staticHexDecMap = { "0": 0x00, "1": 0x01, "2": 0x02, "3": 0x03, "4": 0x04, "5": 0x05, "6": 0x06, "7": 0x07, "8": 0x08, "9": 0x09, "A": 0x0A, "a": 0x0A, "B": 0x0B, "b": 0x0B, "C": 0x0C, "c": 0x0C, "D": 0x0D, "d": 0x0D, "E": 0x0E, "e": 0x0E, "F": 0x0F, "f": 0x0F } def __hexStrToDec(hexStr): global __staticHexDecMap r = 0L for x in hexStr: if x in string.hexdigits: r = r * 16 + __staticHexDecMap[x] else: return 0L return r # 校验每行批处理的参数有效性 def isLineParamError(cmdLine): lineNum = cmdLine[0] cmdData = cmdLine[1] dataLen = len(cmdData) if (dataLen % 2) != 0: __printErrorMsg(0x03, lineNum) return 0x01 dataLen = dataLen / 2 if dataLen < 5: __printErrorMsg(0x02, lineNum) return 0x01 CLA = cmdData[0:2] INS = cmdData[2:4] P3 = cmdData[8:10] __isCorrectCLA(CLA, lineNum) __isCorrectINS(INS, lineNum) if (len(cmdData[10 : len(cmdData)]) / 2) != __hexStrToDec(P3): __printErrorMsg(0x01, lineNum) return 0x01 return 0x00 def checkLineParamError(destList): error = 0x00 tmp = 0x00 for x in destList: tmp = isLineParamError(x) if error == 0x00: error = tmp return error def main(): list = [] fName = os.path.join(os.getcwd(), "Script.cmd") fileToList(list, fName) if checkLineParamError(list): return for x in list: print x[0], x[1] if __name__ == "__main__": main() --------------------------------- Do You Yahoo!? 150万曲MP3疯狂搜,带您闯入音乐殿堂 美女明星应有尽有,搜遍美图、艳图和酷图 1G就是1000兆,雅虎电邮自助扩容! -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.exoweb.net/pipermail/python-chinese/attachments/20050527/f5ee0d90/attachment.html
2005年05月27日 星期五 08:56
就我个人经验,中文的正则表达式匹配好象是不行 复杂的数据结构?? 字典,列表,元组,本来就可以混合使用的,足够折腾的, 不过从分析角度,直接记录到XML不是更好? http://wiki.woodpecker.org.cn/moin/CvsWeeklyStat 就是类似的分析应用,不过提示一点在Unix 环境中有N多更加精巧的工具,使用Python 来调用它们吧!不一定非要纯Py 的哪? 在 05-5-27,泰传 温<wendwghit at yahoo.com.cn> 写道: > > > 1. 正则表达式[.]无法匹配中文, 这是问题码? > > import re > >>> m = re.match("[.]*", ";测试") > >>> print m > <_sre.SRE_Match object at 0x008E4368> > >>> m.group() > '' > > 2. 如何直接使用python来实现复杂的数据结构,如树, 现在在写个小应用程序时, 需要建立一颗树, 以用来统计建立文件系统时目录的空间大小, > 请问那里有相关的库, 或样例代码, 我是从C过来的, 所以使用python还不是很习惯, 看看下面的代码就知道了, > 帮忙指点有那些是可以使用python来进一步改进 > > """ > Check Script Tools. > 用来检验Script的正确性, 也用于正确设置统计目录空间的大小 > """ > import os > import copy > import re > import string > > # 去掉一些无效的串 > def tripLine(srcStr): > """ > srcList is String, if should trip > """ > srcStr = string.upper(srcStr) > > if re.match("^[ \t\n]*$", srcStr): > return "" # 空行 > > m = re.match("^[ \t]*[^;]*;", srcStr) > if m: # 批处理中的注释, 这里只处理使用;开头的注释 > srcStr = m.group()[0 : -1] # 去掉剩下的; > > m = re.match("[^\(]*\(", srcStr) > if m: > srcStr = m.group()[0 : -1] # 去掉 状态字 > > m = re.findall("[\d\w]+", srcStr) > srcStr = "" > for x in m: > srcStr = srcStr + x # 去掉串中的空格和\t > > return srcStr > > > # 将文件内容转换为一个串的列表 > def fileToList(destList, fileName): > """ > Read file and translate to lines. > """ > try: > fp = open(fileName, "r") > except IOError: > print "Cannot Open FIle ", fileName > raise IOError > st = [] > readStr = "" > lineNum = int(1) > readStr = fp.readline() > st = [lineNum, readStr] > while readStr: > st[0] = lineNum > st[1] = tripLine(readStr) > if st[1]: > destList.append(copy.deepcopy(st)) > else: > pass > lineNum = lineNum + 1 > readStr = fp.readline() > > fp.close() > return > > # 错误信息串 > __staticErrorStr = ( "Not ERROR", # 0x00 > "P3 ERROR", # 0x01 > "APDU Too Short", # 0x02 > "Data Length is not Even", # 0x03 > "CLA ERROR, must A0 or C0", # 0x04 > "INS ERROR" # 0x05 > ) > > # 打印错误信息 > def __printErrorMsg(errorNum, lNum): > global __staticErrorStr > print "Incorrect APDU, Line %d\tReason: %s" %(lNum, > __staticErrorStr[errorNum]) > > def __isCorrectCLA(CLA, lNum): > if (CLA == "A0") or (CLA == "C0"): > return > else: > __printErrorMsg(0x04, lNum) > > def __isCorrectINS(INS, lNum): > if 1: > return > else: > __printErrorMsg(0x05, lNum) > > # 十六进制数值转换用表 > __staticHexDecMap = { "0": 0x00, "1": 0x01, "2": 0x02, "3": 0x03, "4": > 0x04, "5": 0x05, "6": 0x06, "7": 0x07, "8": 0x08, > "9": 0x09, "A": 0x0A, "a": 0x0A, "B": 0x0B, "b": > 0x0B, "C": 0x0C, "c": 0x0C, "D": 0x0D, "d": 0x0D, > "E": 0x0E, "e": 0x0E, "F": 0x0F, "f": 0x0F > } > def __hexStrToDec(hexStr): > global __staticHexDecMap > r = 0L > for x in hexStr: > if x in string.hexdigits: > r = r * 16 + __staticHexDecMap[x] > else: > return 0L > > return r > > # 校验每行批处理的参数有效性 > def isLineParamError(cmdLine): > lineNum = cmdLine[0] > cmdData = cmdLine[1] > dataLen = len(cmdData) > > if (dataLen % 2) != 0: > __printErrorMsg(0x03, lineNum) > return 0x01 > > dataLen = dataLen / 2 > if dataLen < 5: > __printErrorMsg(0x02, lineNum) > return 0x01 > > CLA = cmdData[0:2] > INS = cmdData[2:4] > P3 = cmdData[8:10] > > __isCorrectCLA(CLA, lineNum) > __isCorrectINS(INS, lineNum) > > if (len(cmdData[10 : len(cmdData)]) / 2) != __hexStrToDec(P3): > __printErrorMsg(0x01, lineNum) > return 0x01 > > return 0x00 > > > def checkLineParamError(destList): > error = 0x00 > tmp = 0x00 > for x in destList: > tmp = isLineParamError(x) > if error == 0x00: > error = tmp > > return error > > def main(): > list = [] > fName = os.path.join(os.getcwd(), "Script.cmd") > fileToList(list, fName) > > if checkLineParamError(list): > return > > for x in list: > print x[0], x[1] > > if __name__ == "__main__": > main() > > > ________________________________ > Do You Yahoo!? > 150万曲MP3疯狂搜,带您闯入音乐殿堂 > 美女明星应有尽有,搜遍美图、艳图和酷图 > 1G就是1000兆,雅虎电邮自助扩容! > > > _______________________________________________ > python-chinese list > python-chinese at lists.python.cn > http://python.cn/mailman/listinfo/python-chinese > > > -- [Time is unimportant, only life important!]
Zeuux © 2025
京ICP备05028076号