【问题标题】:Getting files with same name irrespective of their extension获取具有相同名称的文件,无论其扩展名如何
【发布时间】:2013-06-24 18:54:31
【问题描述】:

我想列出所有具有相同名称的文件,而不考虑它们的扩展名。

os.walk 当我尝试搜索不带扩展名的文件名但提到带扩展名的文件名时,结果为空列表。它列出了任何目录中具有相同名称和扩展名的所有文件。

def get_all_files(path):
    Datafiles=[]

    for root,dirs,files in os.walk(path):
        for file in files:
            pathname=os.path.join(root,file)
            Datafiles.append([file,pathname])

    return Datafiles

【问题讨论】:

  • os.walk 不做通配符

标签: python file-io


【解决方案1】:

您可以使用fnmatch.filter() 函数来识别感兴趣的文件名:

import os, fnmatch

def get_all_files(path, pattern):
    datafiles = []

    for root,dirs,files in os.walk(path):
        for file in fnmatch.filter(files, pattern):
            pathname = os.path.join(root, file)
            filesize = os.stat(pathname).st_size
            datafiles.append([file, pathname, filesize])

    return datafiles

print get_all_files('.', 'something.*') # all files named 'something'

但是,请注意,如果再添​​加几行代码,也可以使一些更通用的东西支持os.walk() 的所有关键字参数:

import os, fnmatch

def glob_walk(top, pattern, **kwargs):
    """ Wrapper for os.walk() that filters the files returned
        with a pattern composed of Unix shell-style wildcards
        as documented in the fnmatch module.
    """
    for root, dirs, files in os.walk(top, **kwargs):
        yield root, dirs, fnmatch.filter(files, pattern)

# sample usage
def get_all_files(path, pattern):
    for root, dirs, files in glob_walk(path, pattern):
        for file in files:
            pathname = os.path.join(root, file)
            filesize = os.stat(pathname).st_size
            yield file, pathname, filesize

print list(get_all_files('.', 'something.*')) # all files named 'something'

请注意,此版本中新的glob_walk() 函数(以及get_all_files())是生成器,就像os.walk()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    • 2019-03-26
    相关资源
    最近更新 更多