我是个C/C++ Coder,并不是专业写python的,python lua其实属于一类语言,只不要python的库更多,强大之处并不完全是python语言特性,而且扩展库比较多,请允许我黑一下python,python始终是个脚本语言,优点缺点很明显,作为一个非轻量级脚本语言(与lua较之),python适合干很多系统相关的事情。这里就分析一下如何利用python处理文本,查找,提取。
假定我们要完成这样一个功能:搜索出指定目录内的所有文本,取出指定位置内容,并打印行数和所在的行内容。
遍历目录
列出所有的文件路径,供回调处理,提供较好的扩展性
import os def enum_files_in_dir(dir_,callback_): dirlist = [] dirlist.append(dir_) while len(dirlist) > 0: curdir = dirlist.pop(len(dirlist)-1) list = os.listdir(curdir) for file in list: filepath = os.path.join(curdir,file) if os.path.isdir(filepath): dirlist.append(filepath) else: callback_(filepath)
dirlist是一个表,存储当前文件夹集合,通过append pop来添加删除需要遍历的目录,当目录数为零时即遍历完毕。
2. 处理文件
def ui_text_get_find(filepath_): file = open(filepath_,‘r‘,encoding=‘gbk‘) i = 0 for line in file: i=i+1 result = __ui_text_id_regexobj.search(line) if result: __ui_text_result.add_text_id(locale.atoi(result.group(1))) file.close()
这个方法就是一个处理文件的回调这里用到了正则表达式,接下来会讨论这个问题。
3.构建正则
正则表达式相关的东西,大家可以自行百度
__ui_text_id_xml_regexobj = re.compile(r‘(?<=@ui_text\|)(\d+)‘);
这行正则可以获取所有类似
@ui_text|数字
中的数字字段
如果想收集这些数字ID再处理可以建立相应的数据结构,如果卢针对每一个文本文件都生成对应的信息可以参考目录和文件操作,如果想添加新的处理文件的方式,可以参考
ui_text_get_find
添加新的callback
本文出自 “冰狐浪子的博客” 博客,转载请与作者联系!
原文地址:http://bhlzlx.blog.51cto.com/3389283/1613980