如果之前有人问过这个问题,很抱歉,但我似乎没有找到解决问题的方法。
我有大约500个文本文件,每个文件的大小约为5-6 kB。我需要搜索每个文件并检查其中是否存在特定的关键字,并打印该关键字所在的每个文件的详细信息。
我可以使用以下命令完成此操作
for files in glob.glob("*"):
and then search for the keyword inside the file我确信这不是最有效的方法。还有更好的方法吗?
发布于 2013-10-08 22:25:30
如果您希望目录中包含stdio.h文件的所有*.c文件,您可以这样做
grep "stdio\.h" *.c(注-编辑以回应@Wooble的评论。)
结果可能如下所示
myfile.c: #include <stdio.h>
thatFile.c: #include <stdio.h>等。
如果您想查看“上下文”(例如,前后的行),请使用C标志:
grep -C1 "(void)" *.c结果:
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来完成此任务,您可以使用
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”的输出,并可以根据自己的需要对这些行做一些聪明的事情。
发布于 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中挤出很多速度。
https://stackoverflow.com/questions/19250247
复制相似问题