How to get a filtered list of files in a folder
我试图在一个文件夹中得到一个经过过滤的(或模式化的,尽管我几乎不接触模式内容)文件列表。
我最初的方法是使用
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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_,23_
图片:71_、23_U 1.jpg、71_、23_U 1.png、71_、23_U 3.jpg等
我知道我可以处理
我的第二种方法是使用
1 | x = [f.name for f in os.scandir('images') if f.name.startswith(family in movable)] |
号
当然,即使它适用于特定的"家庭"图像,也不适用,例如适用于
1 | x = [f.name for f in os.scandir('images') if f.name.startswith('51_332,-5_545')] |
例如,我可以将结果连接到一个循环中。
所以,我的问题是:
我使用这个方便的小功能。
1 2 3 4 5 6 7 8 9 10 11 | import os, fnmatch def List(Folder, Name): '''Function to get List of Files in a folder with a given filetype or filename''' try: string = '*' + Name + '*' FileList = fnmatch.filter(os.listdir(Folder), string) return FileList except Exception as e: print('Error while listing %s files in %s : %s' % (string, Folder, str(e))) return [] |