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)