我是個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