Python 如何在endswith函数中返回元组中匹配的元素
我正在尝试使用Python制作一个文件重命名器。我能够成功地在维基百科上搜索到剧集列表,但在制作重命名文件时,我遇到了很多不一致的地方。我想要的是,我希望使用与if条件匹配的扩展名,而不是结尾的“.mkv”。有办法退回吗Python 如何在endswith函数中返回元组中匹配的元素,python,python-3.x,tuples,ends-with,Python,Python 3.x,Tuples,Ends With,我正在尝试使用Python制作一个文件重命名器。我能够成功地在维基百科上搜索到剧集列表,但在制作重命名文件时,我遇到了很多不一致的地方。我想要的是,我希望使用与if条件匹配的扩展名,而不是结尾的“.mkv”。有办法退回吗 extensions = ('.webm','.mkv','.flv','.vob','.ogv', '.ogg','.drc','.gif','.gifv','.mng','.avi','.mov', '.qt','.wmv','.yuv','.rm','.rmv
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]
# ...
另一个线索,首先我将使用提取
文件名
和文件扩展名
然后,如果文件的扩展名
与您的扩展名
元组匹配,我将使用重命名它,尝试
除外
以查看是否有任何错误
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(扩展名):
收件人:if('.'+filename.lower().split('.')[1])在列表(扩展名)中:
希望有帮助 所以,如果我知道您正在寻找像
.mp
这样的断开的扩展名,并使用列表中的项目“修复”它们,您可以使用os.path.splitext
提取路径的扩展名。@zipa不,我只想看看哪个扩展名匹配,例如,我有一个test.mp4和test2.mkv文件,当扩展名匹配时,我希望返回它。[即test.mp4匹配,然后我想要.mp4作为返回值]@EricDuminil它对我有效。@AyushMandowara:我的错,我不知道我是如何测试它的。它确实有效。我使用了第一种方法,代码中的最小更改:)最好使用split('..')[-1]
,因为文件名中也可以有多个句点。(例如:breaking.bad.s02.e02.mp4)在这里,我们只需要“mp4”部分,因此,split(“.”[-1]
就可以了!(按时段分割,并获取列表的最后一个元素)