如果我想从终端grep文件,则可以这样使用AWS CLI:
aws s3 cp s3://path/to/file/filename.tsv.gz - | zgrep 12345
我想从脚本中递归执行此操作。到目前为止,我正在这样做
import boto3
s3_client = boto3.client('s3')
obj = s3_client.get_object(Bucket=bucket, Key=prefix + file_name)
body = obj['Body']
with gzip.open(body, 'rt') as gf:
for ln in gf:
if string in ln:
print(string)
这可以正常工作,但是实际上并不是很快。所以我想改用zgrep。
我尝试过
import subprocess
cp = 'aws s3 cp s3://' + bucket + '/' + prefix + file_name + ' - | zgrep ' + string
result = subprocess.run(cp, check=True, shell=True, stdout=subprocess.PIPE)
print(result)
但是将subprocess.CalledProcessError
作为命令returned non-zero exit status 1