Python:os.walk到特定目录和文件

Python:os.walk到特定目录和文件,python,file,directory,os.walk,Python,File,Directory,Os.walk,我的文件结构如下所示: |num_1 |----|dir1 |--------|dir2 |------------|dcm |----------------\file_1 |----------------\file_2 |----------------\file_n |num_2 |----|dir1 |--------|dcm |------------\file_1 |------------\file_n |num_n 我想使用os.walk(或者更合适的

我的文件结构如下所示:

|num_1

|----|dir1

|--------|dir2

|------------|dcm

|----------------\file_1

|----------------\file_2

|----------------\file_n

|num_2

|----|dir1

|--------|dcm

|------------\file_1

|------------\file_n

|num_n
我想使用os.walk(或者更合适的方法?)遍历树,直到找到目录“dcm”。dcm可以位于树的不同级别

这就是我所拥有的。谢谢

import dicom
import re
import os

dcm = []
PATH = "C:\foo"

#find the directory we want to get to, save path
for path, dirs in os.walk(PATH): 
    for dirname in dirs:
        fullpath = os.path.join(path,dirname)
        if "dcm" in dirname:
            #copied this first_file line - just want a fast and easy way to grab ONE file in the dcm directory
            #without reading any of the others (for time reasons)
            first_file = next((join(path, f) for f in os.listdir(path) if isfile(join(path, f))),"none")
            fullpath = os.path.join(fullpath,first_file)
            dcm.append(fullpath)
我采用了“懒惰”的方式,并使用listdir读取dcm目录下的所有文件——认为资源成本不太高。 话虽如此,我认为从目录中取出一个随机文件而不读取所有这些文件是一个有趣的查询,比我应该回答的更面向Python的人

作为参考,我的最终解决方案是。。。请原谅迭代器的使用效率低下!我是新来的,需要一个快速的解决方案

for path, dirs, filename in os.walk(rootDir): #omit files, loop through later
    for dirname in dirs:
        fullpath = os.path.join(path,dirname)
        if "dcm" in dirname:
            dcm.append(fullpath)

final = []
uni = 0
final.append(dcm[0])
for i in range(len(dcm)):
    if len(os.listdir(dcm[i])) < 10:
        pass
    elif dcm[i][16:19] != final[uni][16:19]:
        final.append(dcm[i])
        uni += 1


tags = ((0x8, 0x70)),((0x8, 0x1090)), ((0x18, 0x1020))
values = []
printout = []
for p in range(len(final)):
    file = os.path.join(final[p],os.listdir(final[p])[0])
    ds = dicom.read_file(file)
    printout.append([final[p]])
    for k in range(len(tags)):
        printout.append([ds[tags[k]]])
对于os.walk(rootDir)中的路径、目录、文件名:#忽略文件,稍后循环
对于目录中的目录名:
fullpath=os.path.join(路径,目录名)
如果目录名中有“dcm”:
dcm.append(完整路径)
最终=[]
uni=0
final.append(dcm[0])
对于范围内的i(len(dcm)):
如果len(os.listdir(dcm[i])小于10:
通过
埃利夫dcm[i][16:19]!=最后定稿[统一][16:19]:
final.append(dcm[i])
uni+=1
标记=((0x8,0x70)),((0x8,0x1090)),((0x18,0x1020))
值=[]
打印输出=[]
对于范围内的p(长度(最终)):
file=os.path.join(final[p],os.listdir(final[p])[0])
ds=dicom.read_文件(文件)
打印输出。追加([最终[p]])
对于范围内的k(长度(标记)):
打印输出。追加([ds[标记[k]]))
我采用了“懒惰”的方式,并使用listdir读取dcm目录下的所有文件-认为资源成本不是太高。 话虽如此,我认为从目录中取出一个随机文件而不读取所有这些文件是一个有趣的查询,比我应该回答的更面向Python的人

作为参考,我的最终解决方案是。。。请原谅迭代器的使用效率低下!我是新来的,需要一个快速的解决方案

for path, dirs, filename in os.walk(rootDir): #omit files, loop through later
    for dirname in dirs:
        fullpath = os.path.join(path,dirname)
        if "dcm" in dirname:
            dcm.append(fullpath)

final = []
uni = 0
final.append(dcm[0])
for i in range(len(dcm)):
    if len(os.listdir(dcm[i])) < 10:
        pass
    elif dcm[i][16:19] != final[uni][16:19]:
        final.append(dcm[i])
        uni += 1


tags = ((0x8, 0x70)),((0x8, 0x1090)), ((0x18, 0x1020))
values = []
printout = []
for p in range(len(final)):
    file = os.path.join(final[p],os.listdir(final[p])[0])
    ds = dicom.read_file(file)
    printout.append([final[p]])
    for k in range(len(tags)):
        printout.append([ds[tags[k]]])
对于os.walk(rootDir)中的路径、目录、文件名:#忽略文件,稍后循环
对于目录中的目录名:
fullpath=os.path.join(路径,目录名)
如果目录名中有“dcm”:
dcm.append(完整路径)
最终=[]
uni=0
final.append(dcm[0])
对于范围内的i(len(dcm)):
如果len(os.listdir(dcm[i])小于10:
通过
埃利夫dcm[i][16:19]!=最后定稿[统一][16:19]:
final.append(dcm[i])
uni+=1
标记=((0x8,0x70)),((0x8,0x1090)),((0x18,0x1020))
值=[]
打印输出=[]
对于范围内的p(长度(最终)):
file=os.path.join(final[p],os.listdir(final[p])[0])
ds=dicom.read_文件(文件)
打印输出。追加([最终[p]])
对于范围内的k(长度(标记)):
打印输出。追加([ds[标记[k]]))