如何获取文件夹

时间:2017-12-13 07:57:16

标签: python python-3.x python-os

我正试图在文件夹中对文件列表进行过滤(或图案虽然我几乎没有触及图案内容)。

我的初步方法是使用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')]

我可以在循环中连接结果,例如。

所以,我的问题是:

  1. 有没有办法用glob返回相对路径?或者我坚持使用绝对路径?
  2. 如何在&#34; pythonic&#34;中获取os.scandir的已过滤文件列表?方式?

1 个答案:

答案 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 []