作者josefy (醉落~最弱)
看板Python
標題Re: [討論] 過濾資料(多重條件)
時間Tue Aug 2 20:49:08 2011
抱歉又來打擾了! 斗膽一問
除了.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