读取目录中的文件子集

时间:2018-07-26 02:58:42

标签: python

我在目录中有一个文件目录,命名为:

tx01.data
tx02.data
tx03.data

当我从命令行调用此模块时,我想传递一个参数以仅读取这些文件的子集范围,例如tx01.data和tx02.data(它将始终是连续范围,而不是文件的随机选择)。

我当前正在使用glob读取目录中的所有文件。从我发现的情况来看,glob不能很好地与子集配合使用。我找到的最接近的是this answer

是否有更好的方法来读取可以从命令行传递的子集范围?

2 个答案:

答案 0 :(得分:1)

这应该为您完成工作:

import argparse
import re
from os import listdir

if __name__ == "__main__":

    parser = argparse.ArgumentParser(description='Process some files.')
    parser.add_argument("--range", type=str, help='file range (i.e. 0-100)', default='0-100')
    args = parser.parse_args()

    try:
        file_range = list(map(int, args.range.split('-')))
    except Exception as e:
        raise Exception('Invalid parameter format...\n%s' % e)

    dir_files = listdir('.')
    matches_list = list(map(lambda x: re.match(r'm([0-9]+)\.data', x), dir_files))
    files = [x.group() for x in matches_list if x and (file_range[0] <= int(x.groups()[0]) <= file_range[1])]
    print(files)

命令应如下所示:

python script.py-范围0-200

答案 1 :(得分:0)

一种解决方案是在命令行中传递两个数字以告知范围:

choose.py

#!/usr/bin/env python3
import re
import sys
from pathlib import Path

def main():
    first, last = sys.argv[1:]
    pattern = re.compile(rf'tx0?[{first}-{last}]\.data$')
    # pattern = re.compile(r'tx0?[{}-{}]\.data$'.format(first, last))
    for p in Path().glob('*'):
        if pattern.match(p.name):
            print(p.name)


if __name__ == '__main__':
    main()

$ python3 choice.py 2 4

tx02.data
tx03.data
tx04.data