2016-08-15 4 views
0

Я пытаюсь добавить имя папки ко всем именам файлов внутри этой папки. Мне нужно пройти через родительскую папку, содержащую подпапки. Я должен сделать это в Python, а не в bat-файле.python присоединить имя папки к именам файлов во всех подпапках

Пример есть, взять эти папки:

Parent Folder 
Sub1 
    example01.txt 
    example01.jpg 
    example01.tif 
Sub2 
    example01.txt 
    example01.jpg 
    example01.tif 

Для этого

Parent Folder 
Sub1 
    Sub1_example01.txt 
    Sub1_example01.jpg 
    Sub1_example01.tif 
Sub2 
    Sub2_example01.txt 
    Sub2_example01.jpg 
    Sub2_example01.tif 

Я считаю его os.rename, но я не могу работать, как назвать имя папки.

Спасибо за совет.

+0

Вы можете использовать 'os.walk' пройти через каталог и получить имена файлов, а затем' os.rename' в измените имена. SO не является службой записи кода. – Harrison

+0

'os.walk' даст мне имена файлов в папке, но это не даст мне имя папки. Если бы я понял это правильно. – burt46

+0

это может помочь http://techs.studyhorror.com/python-get-last-directory-name-in-path-i-139 – Harrison

ответ

2

Я хотел бы использовать os.path.basename на корне, чтобы найти свой префикс.

import os 

for root, dirs, files in os.walk("Parent"): 
    if not files: 
     continue 
    prefix = os.path.basename(root) 
    for f in files: 
     os.rename(os.path.join(root, f), os.path.join(root, "{}_{}".format(prefix, f))) 

Перед

> tree Parent 
Parent 
├── Sub1 
│   ├── example01.jpg 
│   ├── example02.jpg 
│   └── example03.jpg 
└── Sub2 
    ├── example01.jpg 
    ├── example02.jpg 
    └── example03.jpg 

2 directories, 6 files 

После

> tree Parent 
Parent 
├── Sub1 
│   ├── Sub1_example01.jpg 
│   ├── Sub1_example02.jpg 
│   └── Sub1_example03.jpg 
└── Sub2 
    ├── Sub2_example01.jpg 
    ├── Sub2_example02.jpg 
    └── Sub2_example03.jpg 

2 directories, 6 files 
+0

Прекрасно работает. Для других, не знакомых, «Родитель» должен иметь двойные пробелы, например. C: \\ \\ dir1 тест – burt46

1

Вы можете использовать os.walk перебрать каталоги, а затем os.rename переименовать все файлы:

from os import walk, path, rename 

for dirpath, _, files in walk('parent'): 
    for f in files: 
     rename(path.join(dirpath, f), path.join(dirpath, path.split(dirpath)[-1] + '_' + f)) 
+0

Это также работает. Большое спасибо – burt46