Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在endswith函数中返回元组中匹配的元素_Python_Python 3.x_Tuples_Ends With - Fatal编程技术网

Python 如何在endswith函数中返回元组中匹配的元素

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

我正在尝试使用Python制作一个文件重命名器。我能够成功地在维基百科上搜索到剧集列表,但在制作重命名文件时,我遇到了很多不一致的地方。我想要的是,我希望使用与if条件匹配的扩展名,而不是结尾的“.mkv”。有办法退回吗

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]
就可以了!(按时段分割,并获取列表的最后一个元素)