作者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
1F:→ suzuke:如果你的cpu是多核心, 可以考虑多执行绪或多进程来彻底运用 08/02 21:17
2F:→ suzuke:cpu的运算能力. 又或者懂C的话也可以用C来改写搜寻那一部份 08/02 21:19
3F:→ suzuke:的code 08/02 21:20
4F:→ suzuke:不过我想如果连本来grep都觉得慢的话, 用C改写code这一部份 08/02 21:22
5F:→ suzuke:应该没有什麽效果 08/02 21:22
6F:→ josefy:如果是四核心 那表示一次可以搜寻四个档案吗? 08/02 21:23
7F:→ josefy:抱歉问得很外行 ^^" (苦笑) 08/02 21:23
8F:→ suzuke:那就要看你的code怎麽写罗, 搜寻四个档案是可以的 08/02 21:29
9F:→ suzuke:有兴趣的话可以去查一下multiprocessing这个模组 08/02 21:29
10F:→ josefy:如果资料具有顺序性核心一比较慢执行完 但要较先执行完的 08/02 21:34
11F:→ josefy:核心二先写入档案 这也是可以在程式中限制的吧? 08/02 21:34
12F:→ suzuke:当然, 不过这就要花时间去研究一下该怎麽写了 08/02 21:41
13F:→ josefy:稍微查了一下 这部分感觉颇深的 有点难以入门的感觉 08/02 22:03
14F:→ suzuke:如果你的系统是32-bit那就可以用psyco试试看, 可能是一个 08/03 09:26
15F:→ suzuke:可以尝试的方法 08/03 09:26