如何 return 元组中的哪个元素在 endswith 函数中匹配
How to return which element from the tuple matched in the endswith function
我正在尝试使用 Python 进行文件重命名。我能够成功地从维基百科上抓取剧集列表,但在制作重命名文件时遇到了很多差异。我想要的是,我想完全使用与 if 条件匹配的扩展名,而不是最后的“.mkv”。有没有办法return呢?
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
好吧,要么你必须一个一个地遍历扩展名,要么你可以拆分文件名来获得扩展名。
按文件名拆分
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]
# ...
另一个线索,首先我将使用 os.path.splitext
.
提取 filename
和 file_extension
然后,如果 file_extension
与您的 extensions
元组匹配,我将用 try
except
重命名它以查看是否有任何错误。
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))
如果我对你的问题的理解正确,下面的代码可能会起作用。
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):
希望对您有所帮助!
我正在尝试使用 Python 进行文件重命名。我能够成功地从维基百科上抓取剧集列表,但在制作重命名文件时遇到了很多差异。我想要的是,我想完全使用与 if 条件匹配的扩展名,而不是最后的“.mkv”。有没有办法return呢?
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
好吧,要么你必须一个一个地遍历扩展名,要么你可以拆分文件名来获得扩展名。
按文件名拆分
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]
# ...
另一个线索,首先我将使用 os.path.splitext
.
filename
和 file_extension
然后,如果 file_extension
与您的 extensions
元组匹配,我将用 try
except
重命名它以查看是否有任何错误。
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))
如果我对你的问题的理解正确,下面的代码可能会起作用。
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):
希望对您有所帮助!