有没有一种方法可以赋予多个文件位置来重命名文件?

时间:2020-08-22 12:45:32

标签: python-3.x

我希望程序将字幕文件重命名为与电影文件相同的字幕文件,它们位于不同的文件夹和子文件夹中。

我所做的:

  1. 导入了osreshutil模块。

  2. 进行for循环以遍历目录并返回父文件夹内的文件/文件夹。

for foldername, subfoldername, filename in os.walk('E:\Movies'):
  1. 此循环将遍历E:\Movies文件夹并假定子文件夹和文件的列表。

  2. 要检查文件是否为字幕文件,请在for循环内

if filename.endswith('(.srt|.idx|.sub)'):
  1. 如何在第二个参数中给出多个路径和新名称?
os.rename(filename,'')

1 个答案:

答案 0 :(得分:0)

为什么要在第二个参数中给出多个路径和新名称?
您共享的代码执行以下操作:

Loop through the directory tree.
For each filename in directory :   
    If file is subtitle file :   
        Rename file to movie file present some directory

在最后一步中,您不会一次重命名所有文件。您一次要做一个。 os.rename(src,dest)
仅接受两个参数,src文件名和dest文件名。 因此,对于您的情况,您将不得不再次遍历目录中的所有文件,将字幕文件的名称与电影文件匹配,然后重命名字幕文件。
尝试类似的东西:

for foldername,subfoldername,filename in os.walk('E:\Movies'):
    if filename.endswith('(.srt|.idx|.sub)'):
        for folder2,subfolder2,moviename in os.walk('E:\Movies'):
            # We don't want to match the file with itself
            if(moviename != filename):
            # You would have to think of your matching logic here
            # How would you know if that subtitle is of that particular movie
            # eg. if subtitle is of form 'a_good_movie.srt' you can split on '_' and check if all words are present in movie name

修改
在注释中进行了澄清之后,您似乎想要实现以下内容:

Loop through all Folders in Directory:
    For each Folder in directory, rename all subtitle_files to the Folder name

您可以在Python 3中执行以下操作:

for folder in next(os.walk(directory))[1]:
    for filename in next(os.walk(directory+folder))[2]:
        if(filename.endswith(('.srt','.idx','.sub'))):
            os.rename(filename,directory);

os.walk()返回一个generator function。您可以像在python 3中那样访问os.walk()生成器的值:

next(os.walk('C:\startdir'))[0] # returns 'C:\startdir'
next(os.walk('C:\startdir'))[1] # returns list of directories in 'C:\startdir'
next(os.walk('C:\startdir'))[2] # returns list of files in 'C:\startdir'

对于python 2,您可以调用具有相同返回值的os.walk().next()[]