我正在尝试使用它们所在的子目录标记重命名我的子目录中的所有.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)
答案 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()
,请查看shutil和glob。
修改强>
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)