我有一个包含多个文件的文件夹。我想计算包含匹配文本的文件数量" Pathology"或模式说" ORC ||||| xxxxxxxx ||||||"在文件夹内的文件里面。我尝试过以下脚本:
import re, os
import glob
list_of_files = glob.glob('./*.hl7')
for fileName in list_of_files:
fin = open( fileName, "r" )
count = 0
for line in fin:
if re.match("Pathology", line):
count +=1
fin.close()
print count
这给我的结果为0.我使用的是python 2.6.6。并没有升级我的python的选项。请建议一种方法。
答案 0 :(得分:1)
如果您接受Perl解决方案,那么这符合要求。
目前,它会打印所有匹配文件的名称。如果您真的只想要计数,请删除第print $ARGV, "\n"
行
use strict;
use warnings;
local @ARGV = glob './*.hl7';
my $count;
while (<>) {
next unless /Pathology/i;
++$count;
print $ARGV, "\n";
close ARGV;
}
print "\n\n$count files found\n";
答案 1 :(得分:1)
您可以使用grep
和wc
:
grep Pathology *.hl7 | wc -l
为您提供点击次数。
grep -c Pathology *.hl7
将列出具有匹配的文件,然后列出每个文件的命中数。
答案 2 :(得分:0)
最简单的方法是使用grep --files-with-matches StringOrPattern *.hl7
或grep -l StringOrPattern *.hl7
但是如果您需要在python中执行此操作,则需要修复缩进,因为您发布的当前代码只会报告最后一个匹配的数量文件。
import re, os
import glob
list_of_files = glob.glob('./*.hl7')
files_with_matches = 0
for fileName in list_of_files:
fin = open( fileName, "r" )
count = 0
for line in fin:
if re.match("Pathology", line):
count +=1
fin.close()
if count > 0:
files_with_matches += 1
print filename, count
print "Done", files_with_matches, "Matches"