簡體   English   中英

更多Pythonistic:使用父文件夾名稱為子目錄添加前綴嗎?

[英]More Pythonistic: prefix subdirectory with parent folder name?

我正在整理文件夾。 給定文件結構:

a/1
a/2
a/3
a/3/3_1
a/3/3_2

我只想在不包含任何子目錄 (即輸出)的情況​​下,以父文件夾為前綴對第一級文件夾進行重命名:

a/a-1
a/a-2
a/3
a/3/3_1
a/3/3_2

我有以下代碼可以做到這一點:

root_dir = "./"
parent_path = os.path.abspath(root_dir)
parent_folder_name = os.path.abspath(root_dir).split('/')[-1]

dirs = []
for entry in os.listdir(root_dir):
    absolute_path = parent_path + "/" + entry
    if os.path.isdir(absolute_path) and entry[0] != ".":
        dirs.append(absolute_path)

for first_level_dir in dirs:
    # travers each directory in root directory
    skip_dir = False

    subdirs = os.walk(first_level_dir).next()[1]
    if len(subdirs) == 0
        volume_folder_name = first_level_dir.split("/")[-1]
        new_dir_name = (parent_path + "/" + parent_folder_name + "-" + volume_folder_name)
        os.rename(first_level_dir, new_dir_name)

代碼有效,但是看起來很冗長。 有沒有更Python的方式來做到這一點?

為了使代碼更具可讀性,請提取has_subdir()函數:

from pathlib import Path

def has_subdir(path):
    return any(p.is_dir() for p in path.iterdir())

root = Path().resolve()
dirs = [p for p in root.iterdir() if p.is_dir() and not has_subdir(p)]
for oldpath in dirs:
    newname = '{}-{}'.format(oldpath.parent.name, oldpath.name)
    oldpath.rename(oldpath.with_name(newname))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM