微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

查找仅包含特定目录的os.walk所有文件

如何解决查找仅包含特定目录的os.walk所有文件

目录树如下所示:

DirA--
     |
     -- Map
     |
     -- fig--
            |
            --file.png
     |
     -- Data--
              |
              -- file.xls
              |
              -- file.csv

有多个目录,包含多个文件。我想获取仅在Data目录中找到的那些文件的完整路径。

这是我到目前为止所拥有的:

dirlist = []
thisdir = os.getcwd()

for root,dirs,files in os.walk(thisdir):
    for d in dirs:
        if d.startswith("Data"):
            dirlist.append(os.path.join(root,d))

解决方法

要仅获取数据目录文件,您将需要组合#loadingsvg

calculate_result

尝试使用“目录” 如果是“ dirs”,则您无权访问文件。例如,当rootfiles时,for root,dirs,files in os.walk(thisdir): if "Data" in root: # try using in instead of startswith for f in files: dirlist.append(os.path.join(root,f)) 列表中将有root,但是您将无权访问DirA文件夹中的文件。 / p>

,
import os
from os import listdir
from os.path import isfile,join

rootdir = os.getcwd()

folder_name = "Data"

def get_files(path):
    onlyfiles = [f for f in listdir(path) if isfile(join(path,f))]
    return onlyfiles

def get_search_files(start_path,folder_name):
    for subdir,files in start_path:
        for x in dirs:
            if x == folder_name:
                data_folder_path = os.path.join(subdir,x)
                dirlist = get_files(data_folder_path)
                return dirlist

dirlist = get_search_files(os.walk(rootdir),folder_name)

,
# This solution will not walk in all the directories and sub-directories as `os.walk` does.
# it will only look for files in specific directories from root. So fast.

import glob
import os

files_path_list = []

for entry in (glob.glob('*/Data/*')): 
        path = os.path.join(os.getcwd(),entry)
        
        if os.path.isfile(path):    
            files_path_list.append(path)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。