如何使用 python 使用父文件的名称加上一些索引重命名文件夹中的子文件

How to rename the sub files in a folder with the name of the parent file plus some index using python

我在给定的父目录中有文件:

parent_folder
 |-file1
    |-img1.jpg
    |-img2.jpg
    |-img3.jpg
 |-file2
    |-img1.jpg
    |-img2.jpg
    |-img3.jpg

我想通过在 Python 中添加父文件夹的名称来重命名 .jpg 文件。怎么办?

parent_folder
 |-file1
    |-file1_img1.jpg
    |-file1_img2.jpg
    |-file1_img3.jpg
 |-file2
    |-file2_img1.jpg
    |-file2_img2.jpg
    |-file2_img3.jpg

我尝试了以下代码,但它不起作用:

def naming():
    path='D:/parent_folder'
    for root, dirs, files in os.walk(path):
        print(files)
        for name in files:
            print(name)
            newname = files + name
            os.rename(join(root,name),join(root,newname))

你可以尝试这样的事情:

import os
import glob

path_l = glob.glob('/**/*.jpg', recursive=True)
for path in path_l:
    path_splitted = path.split('/')
    file_name = path_splitted[-1]
    dir_name = path_splitted[-2]
    new_name = dir_name + '_' + file_name
    new_path = path.replace(file_name, new_name)
    os.rename(path, new_path)

希望对您有所帮助。

Python 3.4+ 中类似这样的东西应该可以工作:

from pathlib import Path

parent_folder = Path('d:/parent_folder')

for obj in parent_folder.glob('*'):
    if obj.is_dir():
        for jpg in obj.glob('*.jpg'):
            jpg.rename(jpg.parent / f'{jpg.parent.name}_{jpg.name}')

如果您的 Python 解释器不支持 f-strings,请使用此替代版本:

from pathlib import Path

parent_folder = Path('d:/parent_folder')

for obj in parent_folder.glob('*'):
    if obj.is_dir():
        for jpg in obj.glob('*.jpg'):
            jpg.rename(jpg.parent / '{0}_{1}'.format(jpg.parent.name, jpg.name))

这是一个概念证明:

$ cat ren.py 
from pathlib import Path

parent_folder = Path('testdir')

for obj in parent_folder.glob('*'):
    if obj.is_dir():
        for jpg in obj.glob('*.jpg'):
            jpg.rename(jpg.parent / f'{jpg.parent.name}_{jpg.name}')
$ tree testdir
testdir
├── dir1
│   ├── file1.jpg
│   └── file2.jpg
└── dir2
    ├── file1.jpg
    └── file2.jpg

2 directories, 4 files
$ python3 ren.py 
$ tree testdir
testdir
├── dir1
│   ├── dir1_file1.jpg
│   └── dir1_file2.jpg
└── dir2
    ├── dir2_file1.jpg
    └── dir2_file2.jpg

2 directories, 4 files
$ 

希望对您有所帮助。