这是我正在处理的代码,用于在 tar.gz 中搜索模式,然后输出找到的文件。
早些时候我有一个类似的问题,但我已经弄清楚了问题 - 当我传入一个已压缩到级别 9 的 tar.gz 文件时,python 返回一个空指针类型错误 - 我相信罪魁祸首在于高压缩级别,因为当我传入常规无参数 tar.gz 文件时,此代码有效...
所以,我试图做一个 gzip.open,但它没有正确提取文件......我试图找出其他方法来搜索和检索带有模式的文件,而无需解压缩整个文件,因为这会花费很多不必要的空间被用完。例如,从 gzip 文件流式传输 zcat 是否有效?
这是我处理过的一些代码的片段
tar = tarfile.open(tarName, 'r:gz')
#tar = gzip.open(tarName, 'rb')
#tar = tarfile.open(sys.stdin.read(), 'r')
directory = directoryname+'/'
if not os.path.exists(directory) and not (param1 == 2):
os.makedirs(directory)
start = time.time()
numTotal = 0;
numFound = 0;
#case 1: look for string anywhere
if (param2 == 0):
for currentFile in tar:
numTotal+=1;
x=tar.extractfile(currentFile)
if stringCheck in x.read():
numFound +=1
if (param1 == 2):
continue
new = open(directory + ntpath.basename(currentFile.name), 'w');
x.seek(0,0)
new.write( x.read() )
new.close()
if (param1 == 1):
print "Instance found at " + currentFile.name