我正在使用包含多个结构相似的文件夹的目录。我想在此目录中多次找到一个文件夹。摆弄里面的文件。然后继续os.walk()直到再次找到该文件夹,然后重复该过程。
示例:
directory:
----X3
----Tim
----Jan
----Eric
----X4
----Tim
----Jan
----Eric
我想找到“ Tim”文件夹的两个实例,并在其中执行类似的操作。
作为旁注,如果我也能获得其上方的文件夹名称,那也将非常有帮助。因此“ Tim”文件夹中的文件可以命名为“ X3-Tim-ThingIWantToDo.file”和“ X4-Tim-ThingIWantToDo.file”
我知道os.walk()
可以完整浏览目录。它可以很容易地找到特定文件。查找特定文件夹显然要困难得多。
for folderName, subfolders, filenames in os.walk('C:\\'):
print('The current folder is ' + folderName)
for subfolder in subfolders:
print('SUBFOLDER OF ' + folderName + ': ' + subfolder)
for filename in filenames:
print('FILE INSIDE ' + folderName + ': '+ filename)
这非常适合仅列出所有内容。但是我想要的是,当folderName
路径包含我要查找的文件名时,我的thingIWantToDO()
代码将执行,然后继续。
类似的东西
for folderName, subfolders, filenames in os.walk('C:\\'):
if folderName contains 'Tim':
andFolderContainingTim = folderName[:-10] #or some number.
thingIWantToDO(folderName, andFolderContainingTim)
我想从此os.walk()中保存两件事, *首先,位于特定搜索文件夹上方的文件夹。 (X3到Tim) *其次,获取文件夹路径,以便我的其余代码可以继续工作。
非常感谢您的帮助。
答案 0 :(得分:0)
您可以使用pathlib
:
mkdir A A/1 A/2 A/3 B B/1 B/3 B/4
.
├── A
│ ├── 1
│ ├── 2
│ └── 3
└── B
├── 1
├── 3
└── 4
from pathlib import Path
def find_all(name):
return list(p for p in Path().glob("**/"+name) if p.is_dir() )
find_all("1")
>>>[PosixPath('A/1'), PosixPath('B/1')]
请注意,返回的列表由Path
instances组成,但是您可以将p
包裹在str(p)
中以获取名称。
从这些Path
实例中,很容易获得父目录:
dirs = find_all("1")
parent_directories = [p.parent for p in dirs]
>>> [PosixPath('A'), PosixPath('B')]