如何将文件重命名为子目录

时间:2017-03-25 10:35:41

标签: python directory subdirectory

我正在尝试使用它们所在的子目录标记重命名我的子目录中的所有.wav文件.Fox示例 目录/子目录1 / 1_1.wav 目录/子目录1 / sdir1_1.wav 。我知道如何在python中重命名文件,但我无法循环遍历子目录,然后添加标记。 虽然下面的代码用于对齐子目录和文件,但它不会循环遍历所有文件,因为如果文件超过dirs,for dire in dirs:将不起作用

 import os

    rootdir = r'C:\Users\test'

    for subdir, dirs, files in os.walk(rootdir):

        for dire in dirs:
          for file in files:
           filepath = subdir+os.sep+file

           if filepath.endswith('.wav'):
             print (dire+ file) 

2 个答案:

答案 0 :(得分:1)

我测试了这个并且它有效。

import shutil
import os
from glob import glob

# Define your source folder.
source_dir = 'F:\\Test\\in\\'
# Define your target folder.
target_dir = 'F:\\Test\\out\\'
# Define the file extension you want to search for.
file_ext = '*.mp4'
# use glob to create a list of files in your source DIR with teh desired extension.
file_check = glob(source_dir + file_ext)


# For each item in file_check shuttle will copy teh source file and write it renamed to your target location.
for i in file_check:

    shutil.copy(i, target_dir + 'dir_out_' + os.path.basename(i)) 
    #os.path.basename gives us just the filename and extension minus the absolute path.
    #i,e test123456.mp4

以下是目标目录的内容:

F:\Test\out\dir_out_test_10.mp4
F:\Test\out\dir_out_test_2.mp4
F:\Test\out\dir_out_test_3.mp4
F:\Test\out\dir_out_test_4.mp4
F:\Test\out\dir_out_test_5.mp4
F:\Test\out\dir_out_test_6.mp4
F:\Test\out\dir_out_test_7.mp4
F:\Test\out\dir_out_test_8.mp4
F:\Test\out\dir_out_test_9.mp4

如果您要执行文件系统移动而不是使用shutil.move()代替shutil.copy(),请查看shutilglob

修改

Python 3.5 +

以下是如何查找根DIR中的所有文件:

glob('F:\\test\\**\\*.mp4', recursive=True)

这将找到根DIR和子文件夹的所有文件,然后你可以使用上面的shutil方法来处理你想要的。

答案 1 :(得分:0)

经过一些试验和错误后,我能够取得成果。

 import os

    rootdir = r'C:\Users\test'

    for dirpath, dirnames, filenames in os.walk(rootdir):

        for file in filenames:
         filepath = dirpath +os.sep+file
         if filepath.endswith('wav'):
                 # split directory filepath
                 split_dirpath = dirpath.split(os.sep)
                 # take the name of the last directory which I want to tag
                 dir_tag = (split_dirpath[-1])
                 # wasn't necessary to split the extension, still....
                 f_name, f_ext = (os.path.splitext(file))
                 # add the tag of the sub dir
                 f_name= dir_tag +'_'+ f_name
                 # create the new file name
                 new_name = f_name +f_ext
                 print(new_name)
                 os.rename(filepath,dirpath+os.sep+new_name)