猿问

python使用glob模块访问选择性文件

我有一个二进制文件集合,其名称如下:


d010-recomb.bin

d011-recomb.bin

.............

.............

.............

d100-recomb.bin

使用python glob模块,我可以访问文件夹中的所有文件,并可以对这些文件进行进一步处理:


import glob

binary = sorted(glob.glob('C:/Users/Desktop/bin/*.bin')) 

我还可以对要访问的文件使用一些条件:


例如,如果我使用以下代码,则可以访问从d010-recomb.bin到d019-recomb.bin的所有文件


binary = sorted(glob.glob('C:/Users/Desktop/bin/d01*.bin'))

但是使用此标准,我无法访问d015至d025之类的文件。


请告诉我我该怎么做才能访问这些文件。


蓝山帝景
浏览 199回答 3
3回答

莫回无

之后过滤列表;将文件名部分转到int或创建要包含的字符串范围:included = {'d{:03d}'.format(i) for i in range(15, 26)}  # a setbinary = sorted(f for f in glob.glob('C:/Users/Desktop/bin/*.bin') if f[21:25] in included) 上面的代码生成所述串'd015' 通过对'd025'作为一组进行快速测试籍串,然后测试前4个字符针对该组中的每个文件的; 因为glob()返回整个文件名,所以我们将其切掉了。对于可变路径,我将基于路径存储切片偏移量以提高速度:pattern = 'C:/Users/Desktop/bin/*.bin'included = {'d{:03d}'.format(i) for i in range(15, 26)}  # a setoffset = len(os.path.dirname(pattern)) + 1binary = sorted(f for f in glob.glob(pattern) if f[offset:offset + 4] in included) 后者的演示:$ mkdir test$ touch test/d014-recomb.bin$ touch test/d015-recomb.bin$ touch test/d017-recomb.bin$ touch test/d018-recomb.bin$ fgbin/python2.7>>> import os, glob>>> pattern = '/tmp/stackoverflow/test/*.bin'>>> included = {'d{:03d}'.format(i) for i in range(15, 26)}  # a set>>> offset = len(os.path.dirname(pattern)) + 1>>> sorted(f for f in glob.glob(pattern) if f[offset:offset + 4] in included)['/tmp/stackoverflow/test/d015-recomb.bin', '/tmp/stackoverflow/test/d017-recomb.bin', '/tmp/stackoverflow/test/d018-recomb.bin']

幕布斯6054654

您可以使用以下方法过滤列表:def filter_path(path,l,r):&nbsp; &nbsp; i = int(os.path.basename(path)[1:4])&nbsp; &nbsp; if (i >= l) and (i <= r):&nbsp; &nbsp; &nbsp; &nbsp; return True&nbsp; &nbsp; return Falseresult = [i for i in binary if filter_path(i,19,31)]如果您对目录中的元素数量有100%的信心,则可以:result = binary[19:30]或者,对数据进行排序后,您可能会发现第一个索引和最后一个索引以及[1] [2]:l = binary.find('C:/Users/Desktop/bin/d015.bin')r = binary.find('C:/Users/Desktop/bin/d023.bin')result = binary[l:r+1]

慕莱坞森

您可能必须手动添加此限制,因为无法通过全局模式来实现。如果您完全知道文件名的构建方式,则可以import osfor i in range(19, 34): # 19 to 33&nbsp; &nbsp; filename = "d%03d-recomb.bin" % i&nbsp; &nbsp; if os.path.exists(os.path.join('C:/Users/Desktop/bin', filename)):&nbsp; &nbsp; &nbsp; &nbsp; print filename
随时随地看视频慕课网APP

相关分类

Python
我要回答