我正试图在文件夹中对文件列表进行过滤(或图案虽然我几乎没有触及图案内容)。
我的初步方法是使用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
的工作几乎与我预期的一样除了它返回绝对路径这一事实,而我想要一个相对的(只有文件名)将它附加到目标文件夹。
为了更清楚,我有一个文件夹,其中包含各种图像,这些图像分组在&#34; family&#34;它来自相同的原始图像。例如。
家庭: 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)]
当然,它根本不起作用,虽然它适用于特定的&#34;家庭&#34;例如,图像51_332,-5_545
家庭
x = [f.name for f in os.scandir('images') if f.name.startswith('51_332,-5_545')]
我可以在循环中连接结果,例如。
所以,我的问题是:
os.scandir
的已过滤文件列表?方式?答案 0 :(得分:1)
我使用这个方便的小功能。
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 []