我想从 zip 文件中 grep 查找今天的日期。怎么才能做到这一点?
我有一个名为 sen2616.z 的 zip 文件 我想获取今天日期 09.02.2014 的所有数据
请使用
zipgrep
。
zgrep
适用于 gz 文件,不适用于 zip 文件。
就我而言,
zgrep
不适用于普通的.zip
文件。我不得不使用 zipgrep
来代替。
您可以使用
zgrep
来获得您想要的东西,方法是:
zgrep '09.02.2014' myfile.zip
请参阅
man zgrep
了解更多信息。
这是我在 Python 中的快速实现。可以根据品味和需求进行增强,但具有在命令行上跨多个
.zip
(或 .jar
)文件并行化的优点:
import sys
import re
import zipfile
import posix
import multiprocessing
try:
Pattern = re.compile(bytes(sys.argv[1], sys.getdefaultencoding()))
except IndexError:
print('Usage:\n\t%s pattern file1.zip [file2.zip ...]', sys.argv[0])
sys.exit(posix.EX_USAGE)
except re.error as e:
print('Invalid search pattern "%s": %s' % (sys.argv[1], e))
sys.exit(posix.EX_USAGE)
def grep(filename):
global Pattern
try:
z = zipfile.ZipFile(filename)
except (zipfile.BadZipfile) as e:
print('%s: %s' % (filename, e))
return
for entry in z.infolist():
# Older ZipFile versions do not have is_file-method
try:
if not entry.is_file():
continue
except AttributeError:
if entry.is_dir():
continue
b = z.read(entry)
if Pattern.search(b):
print('%s: %s' % (filename, entry.filename))
if __name__ == "__main__":
pool = multiprocessing.Pool()
pool.map(grep, sys.argv[2:])