读取目录中的文件子集

2024-06-12 03:04:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

tx01.data
tx02.data
tx03.data

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

我目前正在使用glob读入目录中的所有文件。从我发现的情况来看,glob在子集设置中并不是很好。我找到的最近的是this answer。你知道吗

有没有更好的方法来读取可以从命令行传入的子集范围?你知道吗


Tags: 模块文件命令行answer目录data参数情况
2条回答

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

选择.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选择.py2 4个

tx02.data
tx03.data
tx04.data

这应该可以帮你:

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脚本.py范围0-200

相关问题 更多 >