我正在尝试在文件夹中获取过滤(或图案化,尽管我几乎没有触摸图案内容)文件列表。
我最初的方法是glob
:
list_files2 = os.listdir(accordingto)
movable = set()
n = 0
for f in list_files2:
name, ext = os.path.splitext(f)
name = name.rsplit("_", 1)[0]
movable.add(name)
for m in movable:
family = glob("{}{}*".format(dir, m))
for f in family:
# f is absolute path and needs to be relative
shutil.move(f, target+f) # <- problem is here
n += 1
它几乎按我的预期工作,除了它返回一个绝对路径,而我想要一个相对路径(只有文件名)将它附加到目标文件夹。
为了更清楚,我有一个文件夹,其中包含从同一原始图像派生的“家庭”中分组的各种图像。例如
家庭: 71_157,23_850
图片: 71_157,23_850_1.jpg, 71_157,23_850_1.png, 71_157,23_850_3.jpg 等
我知道我可以处理返回的每个项目,glob
但它似乎有点循环。
我的第二种方法是os.scandir
:
x = [f.name for f in os.scandir('images') if f.name.startswith(family in movable)]
51_332,-5_545
尽管它适用于特定的图像“家庭”,例如家庭,但它当然根本不起作用
x = [f.name for f in os.scandir('images') if f.name.startswith('51_332,-5_545')]
例如,我可以将结果连接到一个循环中。
所以,我的问题是:
- 有没有办法用 glob 返回相对路径?还是我被绝对路径困住了?
- 如何
os.scandir
以“pythonic”方式获得过滤的文件列表?