看板 Python 關於我們 聯絡資訊
抱歉又來打擾了! 斗膽一問 除了.findall以及grep之外 是否有其他更有效率的搜尋方式 目前我寫的程式常常得搜尋約一百多個文字檔 效率真的很差 抓出一個檔案中 欲取的數據 得要一秒多 有時候要抓上千筆 ... 那會等很久的 . . . 不知道是否有方式可以提升效能? 如果能夠自己製作一個比較有效率的subroutine也可考慮 但不太確定這樣子的話要怎麼寫 感謝您的閱讀 ※ 引述《suzuke (suzuke)》之銘言: : ※ 引述《josefy (醉落~最弱)》之銘言: : : 感謝S兄的解答 小弟我遇到另一個困難 : : 就在把寫好的程式由linux拿到Windows上跑的時候 : : 搜尋不出任何結果 我猜是因為windows灌的python不支援grep : grep本身不是python的指令 : 而是在linux shell底下的一個程式 : 因為是利用python的command模組來調用shell裡的指令來用 : 所以當然在windows底下沒辦法使用 : 不過我印象中python好像也有類似grep的模組(不太確定~) : : 因此後來改回 .findall這個方法 結果也可以用了 : : 但想要請問的是 如果要找的東西放在一個list裡面 : : a=['A','B','C','D','E'] : : 然後我希望能夠疊代進入.findall裡面 : : result=re.findall('(.*)a[index](.*)',data,re.I) : ^^^^^^^^^^^^^^^^基本上這邊給的就是一個字串 : 所以你應該去讀一下有關python字串的使用方法 : 舉例來說, 如果你有五個字串分別是dir_A, dir_B, dir_C, dir_D, dir_E : 那要怎麼用變數來簡化寫法勒 : 就是 : a = [ 'A', 'B', 'C', 'D', 'E'] : for name in a: : print "dir_" + name : 這邊的"dir_a"是一個字串, 可以和另一個字串(由變數name取代)相加成為一個新的字串 : 如果只是很簡單的字串可以這樣用 : 不過基本上還是建議也把正規表示法學好, 會有很大的幫助 : : 似乎不太可行 請問有甚麼方法嗎 : : 應該不會需要寫五次 fe.findall吧? ^.^" 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.37.166.88
suzuke:如果你的cpu是多核心, 可以考慮多執行緒或多進程來徹底運用 08/02 21:17
suzuke:cpu的運算能力. 又或者懂C的話也可以用C來改寫搜尋那一部份 08/02 21:19
suzuke:的code 08/02 21:20
suzuke:不過我想如果連本來grep都覺得慢的話, 用C改寫code這一部份 08/02 21:22
suzuke:應該沒有什麼效果 08/02 21:22
josefy:如果是四核心 那表示一次可以搜尋四個檔案嗎? 08/02 21:23
josefy:抱歉問得很外行 ^^" (苦笑) 08/02 21:23
suzuke:那就要看你的code怎麼寫囉, 搜尋四個檔案是可以的 08/02 21:29
suzuke:有興趣的話可以去查一下multiprocessing這個模組 08/02 21:29
josefy:如果資料具有順序性核心一比較慢執行完 但要較先執行完的 08/02 21:34
josefy:核心二先寫入檔案 這也是可以在程式中限制的吧? 08/02 21:34
suzuke:當然, 不過這就要花時間去研究一下該怎麼寫了 08/02 21:41
josefy:稍微查了一下 這部分感覺頗深的 有點難以入門的感覺 08/02 22:03
suzuke:如果你的系統是32-bit那就可以用psyco試試看, 可能是一個 08/03 09:26
suzuke:可以嘗試的方法 08/03 09:26
suzuke:參考: http://goo.gl/30fnq 08/03 09:29