python脚本,递归目录

时间:2016-03-07 13:03:14

标签: python recursion directory

我有以下代码,我需要使其递归(它不仅重命名该文件夹中的文件,而且还重命名该文件夹中的文件夹等...)

import glob
for file in glob.glob("/Users/shirin/Desktop/Artez/untitled.*"):
    print(file)

import glob
import os
from datetime import datetime

current_day = datetime.now().strftime("%Y-%m-%d")

for source_name in glob.glob("/Users/shirin/Desktop/Artez/untitled.*"):
    path, fullname = os.path.split(source_name)
    basename, ext = os.path.splitext(fullname)
    target_name = os.path.join(path, '{}{}'.format(current_day, ext))
    os.rename(source_name, target_name)

3 个答案:

答案 0 :(得分:0)

  

我如何在我的代码中实现它?

类似的东西:

import glob
import os
from datetime import datetime

current_day = datetime.now().strftime("%Y-%m-%d")

for root, dirs, files in os.walk("/Users/shirin/Desktop/Artez"):
    for f in files:
        if not f.startswith("untitled."):
            continue
        basename, ext = os.path.splitext(fullname)
        source_name = os.path.join(root, f)
        target_name = os.path.join(root, '{}{}'.format(current_day, ext))
        os.rename(source_name, target_name)

答案 1 :(得分:0)

试试这个:

import os
from datetime import datetime

def walk_dir(path):
    current_day = datetime.now().strftime("%Y-%m-%d")
    for root, dirs, files in os.walk(path):    
        for filename in files:
            current = root + "/" + filename
            if os.path.isfile(current):
                print "ORIGINAL NAME: " + current
                ext = os.path.splitext(filename)[1]
                target_name = os.path.join(root, '{}{}'.format(current_day, ext))
                print "NEW NAME: " + target_name
                os.rename(current, target_name)

walk_dir("/Users/shirin/Desktop/Artez")

我在包含子目录和文件的目录上运行walk_dir()。仅重命名文件。输出:

>>> walk_dir("dir1")
ORIGINAL NAME: dir1/i_am_a_file_in_dir1.doc
NEW NAME: dir1/2016-03-07.doc
ORIGINAL NAME: dir1/dir2/file_in_dir2_saying_hi
NEW NAME: dir1/dir2/2016-03-07
ORIGINAL NAME: dir1/dir2/dir3/file_nested
NEW NAME: dir1/dir2/dir3/2016-03-07
ORIGINAL NAME: dir1/dir2/dir3/dir3file
NEW NAME: dir1/dir2/dir3/2016-03-07
ORIGINAL NAME: dir1/dir2/another_dir_at_level2/level2_dir2_file.extension
NEW NAME: dir1/dir2/another_dir_at_level2/2016-03-07.extension

答案 2 :(得分:0)

你必须在自己内部调用一个函数才能递归。 一种方法:

import os
from datetime import datetime

current_day = datetime.now().strftime("%Y-%m-%d")

def rename_files(path):
    os.chdir(path)
    for source_name in next(os.walk('.'))[2]:
        path, fullname = os.path.split(source_name)
        basename, ext = os.path.splitext(fullname)
        target_name = os.path.join(path, '{}{}'.format(current_day, ext))
        os.rename(source_name, target_name)
    for dir_name in next(os.walk('.'))[1]:
        rename_files(dir_name)
    os.chdir('..')


rename_files("/Users/shirin/Desktop/Artez")