我想在目录中向下移动几层,直到找到一个以整数命名的文件夹,然后对该文件夹中的内容进行某些操作。重要的是,我仍然可以访问已处理文件夹的名称(整数),因为我使用该名称来命名操作的输出。我需要的文件夹名称中始终只有一个整数,没有其他字符。 我尝试了一个嵌套循环,该循环有效,但不幸的是,我的深度并不总是相同(有时会下降2个文件夹,有时甚至更多)
到目前为止,这是我所能得到的,它似乎可以在某些目录上工作,但对其他目录则什么也不返回。
for root, dirs, files in os.walk("directory"):
for name in dirs:
try:
int(name.split("\\")[-1])
print(os.path.join(root, name))
except:
continue
可能更好的方法是,一旦循环到达包含整数名称文件夹的文件夹,循环就会停止,然后对这些整数子文件夹执行某些操作。
最有效的方法是什么?
答案 0 :(得分:0)
您的代码很好。我仅作了一些小改动,使其更具通用性。让我知道什么不起作用,例如丢失的目录路径,我将改善答案。
import os
def process_folders(root_dn, f, op):
processed = []
for root, dirs, files in os.walk(root_dn):
for dn in dirs:
if f(dn):
path = os.path.join(root, dn)
rv = op(dn, path)
processed += [(dn, path, rv)]
return processed
# This is the function that tests if the directory name is one you're looking for
def dn_filter(s):
rv = True
try:
int(s)
except:
rv = False
return rv
# -or-
#return s in in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# This is the function that will process your directory. Return a value to indicate success
def dn_op(dn, path):
print('Processing:', dn, 'at', path)
return True
root_dn = '.'
processed = process_folders(root_dn, dn_filter, dn_op)
# Print all processed directories and their associated return values
for dn, path, success in processed:
print(dn, path, success)
答案 1 :(得分:0)
import os
import re
def findDir(basePath):
for root, dirs, files in os.walk(basePath):
print(dirs)
for name in dirs:
try:
if re.match("\\d", name):
return (root, name)
except:
continue
return ('', '')
(r,n) = findDir("G:\\Kinetochore_3C_imaging")
print(n)
print(os.path.join(r, n))