2017-04-26 59 views
3

我正在尝试使用Python创建文件重命名器。我能够成功地为维基百科搜集剧集列表,但在制作重命名文件时,我遇到了很多不同之处。我想要的是,而不是'.mkv'最后我想使用完全匹配if条件的扩展名。有没有办法返回它?如何返回在函数中匹配的元组中的哪个元素

extensions = ('.webm','.mkv','.flv','.vob','.ogv', 
    '.ogg','.drc','.gif','.gifv','.mng','.avi','.mov', 
    '.qt','.wmv','.yuv','.rm','.rmvb','.asf','.amv','.mp4', 
    '.m4p', '.m4v','.mpg', '.mp2', '.mpeg', '.mpe', '.mpv', 
    '.mpg', '.mpeg', '.m2v','.m4v','.svi','.3gp','.3g2','.mxf', 
    '.roq','.nsv','.f4v', '.f4p', '.f4a' ,'.f4b','.srt') 
list = f.readlines() 


y = 0 
num = 1 
for filename in os.listdir(path): 
    if filename.endswith(extensions): 
     os.rename(path+"\\"+filename,path+"\\"+str(num)+' - '+list[int(y)].strip('\n')+'.mkv') #instead of mkv, I want extension which was matched in the above if condition. 
    y += 1 
    num += 1 
+0

所以,如果我理解你正在寻求打破扩展,比如'.mp'并从列表项“修理”他们? – zipa

+0

您可以使用'os.path.splitext'来提取路径的扩展名https://docs.python.org/2/library/os.path.html#os.path.splitext。 –

+0

@zipa不,我只想看看哪个扩展匹配,例如,我有一个文件test.mp4和test2.mkv,然后当扩展的扩展名匹配我希望它被返回。 [即test.mp4匹配,然后我想.mp4作为返回值] –

回答

1

那么要么你必须一个接一个地循环扩展,要么你可以拆分文件名来获得扩展名。

分裂按文件名

for filename in os.listdir(path): 
    if filename.endsswith(extensions): 
     extension = filename.split('.')[-1] # you can use os.path.splitext too as Max Chretien suggested 
     # ... 

使用显式循环

for filename in os.listdir(path): 
    matching_extensions = filter(lambda extension: filename.endswith(extension), extensions) 
    if matching_extensions: 
     extension = matching_extensions[0] 
    # ... 
+0

我用第一种方法,我的代码中的最小变化:) –

1

另一个铅,首先我将提取filenamefile_extension使用os.path.splitext的。

然后,如果file_extension匹配您的extensions元组,我将使用tryexcept来重命名它以查看是否有任何错误。

for file_path in os.listdir(path): 
    filename, file_extension = os.path.splitext(file_path) 
    if file_extension in extensions: 
     try: 
      os.rename(file_path, filename + '.mkv') 
     except OSError: 
      print("Error while renaming {}".format(filename)) 
0

如果我正确理解你的问题,可能下面的代码可能工作。

extensions = ('.webm','.mkv','.flv','.vob','.ogv', 
    '.ogg','.drc','.gif','.gifv','.mng','.avi','.mov', 
    '.qt','.wmv','.yuv','.rm','.rmvb','.asf','.amv','.mp4', 
    '.m4p', '.m4v','.mpg', '.mp2', '.mpeg', '.mpe', '.mpv', 
    '.mpg', '.mpeg', '.m2v','.m4v','.svi','.3gp','.3g2','.mxf', 
    '.roq','.nsv','.f4v', '.f4p', '.f4a' ,'.f4b','.srt') 
list = f.readlines() 


y = 0 
num = 1 
for filename in os.listdir(path): 
    if ('.'+filename.lower().split('.')[1]) in list(extensions): 
     os.rename(path+"\\"+filename,path+"\\"+str(num)+' - '+list[int(y)].strip('\n')+'.mkv') 
    y += 1 
    num += 1 

我只是对您的代码做了一些小改动。

来自:if filename.endswith(extensions):

到:if ('.'+filename.lower().split('.')[1]) in list(extensions):

希望它能帮助!

相关问题