Python 读取目录中的文件子集

Python 读取目录中的文件子集,python,Python,我在一个目录中有一个文件目录,名为: tx01.data tx02.data tx03.data 当我从命令行调用此模块时,我希望传入一个参数,以仅读取这些文件的子集范围,例如tx01.data和tx02.data(它将始终是连续范围,而不是随机选择的文件) 我目前正在使用glob读取目录中的所有文件。从我发现的情况来看,glob在子集设置方面做得并不好。我找到的最接近的是 是否有更好的方法读取可以从命令行传入的子集范围?一种解决方案是在命令行传递两个数字,以告知范围: 选择.py $pyth

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

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

我目前正在使用
glob
读取目录中的所有文件。从我发现的情况来看,
glob
在子集设置方面做得并不好。我找到的最接近的是


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

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

选择.py

$python3 choose.py 2 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)
import argparse
进口稀土
从操作系统导入listdir
如果名称=“\uuuuu main\uuuuuuuu”:
parser=argparse.ArgumentParser(description='Process some files')
parser.add_参数(“--range”,type=str,help='file range(即0-100'),默认值='0-100')
args=parser.parse_args()
尝试:
file_range=list(map(int,args.range.split('-'))
例外情况除外,如e:
引发异常('参数格式无效…\n%s“%e”)
dir_files=listdir('.'))
匹配列表=列表(映射(lambda x:re.match(r'm([0-9]+)\.data',x),目录文件))

files=[x.group()表示匹配项列表中的x,如果x和(file\u range[0]),那么沿着
$(ls | head-n | tail-n)
这一行的东西呢?您必须更具体地说明什么是“子集”意思是。如何确定子集中的文件?是否基于名称?在您的示例中,选择
tx01.data
是因为名称中包含
01
,还是因为它是第一个文件,或者是其他原因?@jaslibra您可以在此基础上展开吗?作为传递到python脚本中的参数如何工作?另外,wh你不是用你想要的文件建立一个字符串列表吗?你可以使用shell通配符:
python myscript.py tx0[0-5]。数据
很有趣!在
{first}
{last}
之间的破折号给了我一个编译错误。@Adam_G python3.6+是必需的!
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)