如何使用正则表达式来解析S3桶文件列表 - Python

时间:2014-03-10 05:17:28

标签: python regex amazon-s3

我有以下方法:

def scan_s3dir(dirname):
    try:
        cmd = "s3cmd ls {s3bucket} --recursive".format(s3bucket=dirname)
        output = subprocess.check_output([cmd],
                                         stdin=None,
                                         shell=True)
        #s3://dgsecure/test_data/
        regex = "dgsecure/test_data/[^/]*/(\S+)*"
        installers = re.findall(regex, output)
        print installers
    except Exception, e:
        print e
        sys.exit(2)

当我执行s3cmd ls /path/to/bucket --recursive时,我得到:

2014-02-14 02:21         0   s3://path/to/bucket/
2014-02-14 17:32       236   s3://path/to/bucket/foo.txt
2014-02-26 23:31      6035   s3://path/to/bucket/bar.txt
2014-02-14 22:17      2960   s3://path/to/bucket/baz.txt

从该正则表达式中,我想生成一个列表所有文件,包括subdir中的//path/to/bucket/,例如:

s3://path/to/bucket/hello/world.txt

我希望它返回的输出是:

['s3://path/to/bucket/foo.txt', 's3://path/to/bucket/bar.txt', 's3:////path/to/bucket/baz.txt']

我在正则表达式中缺少什么?

2 个答案:

答案 0 :(得分:2)

尝试运行此命令:

s3cmd ls {s3bucket} --recursive | tr -s ' ' | cut -d " " -f 4 

答案 1 :(得分:0)

这是我在没有正则表达式的情况下会做的事情:

def parse_dir (output):
    if output == "":
        return []
    else:
        dir_list = []
        line = output.split('\n')
        for var in line:
            if var != "":
                dir_list.append(var.split()[3])
        return dir_list[1:]