我有5个目录,我们称它们为dir1,dir2,dir3,dir4,dir5。对于目录中的文件,将文件重命名为目录名称
这些都是当前目录。其中每个包含一个名为title.mkv的文件。我希望将这些文件重命名为他们在目录名,即DIR1文件title.mkv,我要重命名为dir1.mkv。
我也想,然后将文件移动到另一个文件夹。除了os和glob,还需要哪些python工具?
我有5个目录,我们称它们为dir1,dir2,dir3,dir4,dir5。对于目录中的文件,将文件重命名为目录名称
这些都是当前目录。其中每个包含一个名为title.mkv的文件。我希望将这些文件重命名为他们在目录名,即DIR1文件title.mkv,我要重命名为dir1.mkv。
我也想,然后将文件移动到另一个文件夹。除了os和glob,还需要哪些python工具?
如果你有完整的文件名和目录,重命名这些文件,你可以使用
import os
f_name = 'E:/temp/nuke.mkv'
# Removes '/' at the end of string
while f_name.endswith('/'):
f_name = f_name[:-1]
# Generates List Containing Directories and File Name
f_name_split = f_name.split('/')
f_path = ''
# Iterates Through f_name_split, adding directories to new_f_path
for i in range(len(f_name_split)-1):
f_path += f_name_split[i] + '/'
# Makes New Name Based On Folder Name
new_name = f_name_split[-2] + '.mkv'
# Gets The Old File Name
f_name = f_name_split[-1]
# Renames The File
os.rename(f_path + f_name, f_path + new_name)
要经过所有的目录,你可以做到这一点递归的,有它的系统输出到文件[窗口:DIR/S/b/A> file.txt的],或使用os.walk。要移动一个文件,你可以使用os.rename(源,目的地)
以下应该工作,虽然你会遇到问题如果每个源文件夹多个文件:
import os
source_folder = r"c:\my_source_folder"
target_folder = r"c:\target_folder"
for directory_path, dirs, files in os.walk(source_folder):
# Current directory name
directory = os.path.split(directory_path)[1]
# Ensure only MKV files are processed
files = [file for file in files if os.path.splitext(file)[1].lower() == '.mkv']
# Rename each file
for file in files:
source = os.path.join(directory_path, file)
target = os.path.join(target_folder, directory + ".mkv")
try:
os.rename(source, target)
except OSError:
print "Failed to rename: {} to {}".format(source, target)
它将从源文件夹中搜索所有子文件夹,并使用当前文件夹名称为目标名称。
'os.rename'不能跨文件系统工作。 'shutil.move'的确如此。 –
以下函数使用shutil.move
,它跨文件系统移动并覆盖保护以防目标文件存在。文件名可以是相对的。
from os.path import basename, dirname, isfile, abspath, splitext
from shutil import move
def rename_to_dirname_and_move(name, dst, overwrite=False, verbose=False):
"""renames 'name' to its directory name, keeping its extension
intact and moves to 'dst' directory across filesystem
"""
if not isfile(name):
raise ValueError("{} is not a file or doesn't exist".format(name))
abs_name = abspath(name)
dir_name = basename(dirname(abs_name))
new_name = '{}{}'.format(dir_name, splitext(name)[1])
dst_name = os.path.join(dst, new_name)
if not overwrite and isfile(dst_name):
raise OSError('file {} exists'.format(dst_name))
try:
move(abs_name, dst_name)
except Exception as e:
print("Can't move {} to {}, error: {}".format(abs_name, dst_name,e))
else:
if verbose:
print('Moved {} to {}'.format(abs_name, dst_name))
可能'shutil.move()'如果你不想使用'os.rename()' http://stackoverflow.com/questions/8858008/moving-a-file-in- python –