Я пытаюсь написать программу, которая может переименовывать каталоги на основе определенного ключевого слова, которое появляется внутри текстовых файлов внутри каждого из каталогов после части «Ключевое слово:» в файлах. Таким образом, для Case003 ниже файлы orange.txt и cow.txt содержат одно и то же ключевое слово, которое переименует их родительский каталог. Эта часть достаточно проста для выполнения, и не то, что мне сейчас нужно, но структура каталогов - это то, что мешает мне реализовать это. Это структура каталогов
Project_Folder
├── Case001
│ └── asdf422345112323423
│ └── puppy.txt
├── Case002
│ ├── jjasdfjtnqn3881847471
│ │ └── apple.txt
│ └── jtnjjqjqjwkwktjjthqj
│ └── banana.txt
└── Case003
└── asdfasdfntjejqk21244
├── herwerhqkethf4443434
│ ├── orange.txt
│ └── cow.txt
└── jdjdjafjejqjqyttjdjak
└── cat.txt
Я думаю, мне нужно использовать os.walk
здесь, но я борюсь с тем, как сделать так, чтобы он изменял только имя родительского каталога, так как генератор os.walk
включает все каталоги и подкаталоги внутри каталога, переданного в os.walk
. Есть ли хороший способ вызывать только родительские каталоги, которые содержат .txt
файлов?
Если это поможет прояснить ситуацию, для Case003 вывод кода будет выглядеть так, при условии, что ключевое слово внутри текстовых файлов Plane
и Island
в соответствующих родительских каталогах.
└── Case003
└── asdfasdfntjejqk21244
├── Plane
│ ├── orange.txt
│ └── cow.txt
└── Island
└── cat.txt
(Древовидная диаграмма, созданная с помощью генератора дерева ASCII для Visual Studio, которую можно найти здесь