首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python 3.x中高效地搜索多个文件的关键字的最佳方法?

在python 3.x中高效地搜索多个文件的关键字的最佳方法?
EN

Stack Overflow用户
提问于 2013-10-08 22:17:33
回答 2查看 1.9K关注 0票数 0

如果之前有人问过这个问题,很抱歉,但我似乎没有找到解决问题的方法。

我有大约500个文本文件,每个文件的大小约为5-6 kB。我需要搜索每个文件并检查其中是否存在特定的关键字,并打印该关键字所在的每个文件的详细信息。

我可以使用以下命令完成此操作

代码语言:javascript
复制
for files in glob.glob("*"):
      and then search for the keyword inside the file

我确信这不是最有效的方法。还有更好的方法吗?

EN

回答 2

Stack Overflow用户

发布于 2013-10-08 22:25:30

如果您希望目录中包含stdio.h文件的所有*.c文件,您可以这样做

代码语言:javascript
复制
grep "stdio\.h" *.c

(注-编辑以回应@Wooble的评论。)

结果可能如下所示

代码语言:javascript
复制
myfile.c: #include <stdio.h>
thatFile.c: #include <stdio.h>

等。

如果您想查看“上下文”(例如,前后的行),请使用C标志:

代码语言:javascript
复制
grep -C1 "(void)" *.c

结果:

代码语言:javascript
复制
scanline.c-
scanline.c:int main(void){
scanline.c-  double sum=0;
--
tour.c-
tour.c:int main(void) {
tour.c-int *bitMap;

等。

我认为这对你来说应该很好。

再次强调@Wooble的另一个观点:如果您真的想使用Python来完成此任务,您可以使用

代码语言:javascript
复制
import subprocess

p = subprocess.Popen('grep stdio *.c', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in p.stdout.readlines():
    print line,
retval = p.wait()

现在,您可以访问“使用Python”的输出,并可以根据自己的需要对这些行做一些聪明的事情。

票数 0
EN

Stack Overflow用户

发布于 2020-01-14 13:13:29

grep并不总是一种选择。如果您正在编写一个要在工作环境中使用的python脚本,而该环境恰好主要是Windows环境,那么当您告诉您的团队需要安装grep时,您就是在窃取他们的依赖项管理。这可不是什么好事。

我还没有找到比glob更快的搜索文件系统的方法,但是有一些方法可以加快搜索文件的速度。例如,如果您知道您的文件将有很多短行(例如json或xml文件),您可以跳过查看任何比最小关键字短的行。

python中的regex库也相当慢。与在每行上运行正则表达式相比,一次搜索一行中的一个字符以查看是否为正则表达式( line[ len(str_to_search_for) : ] == str_to_search_for )要快得多。

我最近在文件系统上做了相当多的搜索,对于500 get的数据集,我从大约8个小时开始搜索,然后使用这样的简单技术将它们减少到3个小时。这需要一些时间,因为您正在根据您的用例定制您的策略,但如果这样做,您可以从python中挤出很多速度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19250247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档