Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用os.walk查找特定目录下的所有文件_Python_Os.walk - Fatal编程技术网

Python 使用os.walk查找特定目录下的所有文件

Python 使用os.walk查找特定目录下的所有文件,python,os.walk,Python,Os.walk,目录树如下所示: DirA-- | -- Map | -- Fig-- | --file.png | -- Data-- | -- file.xls | -- file.csv 有多个目录,包含多个文件。我想获取那些仅在Data目录中找到的文件的完整路径 这就是我到目前为止所做

目录树如下所示:

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))

要仅获取数据目录文件,您需要将
根目录
文件
组合起来

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))
尝试使用“dirs”执行此操作
在“dirs”的情况下,您无权访问这些文件。例如,当
root
DirA
时,您将在
dirs
列表中有
--Data-->
,但您将无法访问
--Data--
文件夹的文件。

请尝试
thisdir=os.getcwd()+“/Data”
。在作为usualthanks循环文件之后,os.getcwd()指向根目录,在根目录中有几个目录Dir1、Dir2等,“Data”是一个子目录。恐怕这行不通。我想我不明白。getcwd()返回进程的当前工作目录,它是根文件夹吗?“数据”文件夹在根目录中?对不起@jacobgalam,可能我自己也弄糊涂了。您建议在何处添加它?在代码的开头,第2行看起来非常整洁,但是它返回一个空列表。如果dirs.startswith(“数据”),则应该是不?不,您不能这样做。啊哈,将root.startswith()更改为root.endswith()有效!因为--Data--将位于路径的末尾,而不是startThanks,但它给出了一个空集。谢谢,我接受了其他答案,因为它非常简洁。
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, dirs, 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)