python迭代文件列表,查找相同的文件名但不同的扩展名

python迭代文件列表,查找相同的文件名但不同的扩展名,python,list,list-comprehension,Python,List,List Comprehension,因此,我有一份清单如下: mylist=['movie1.mp4'、'movie2.srt'、'movie1.srt'、'movie3.mp4'、'movie1.mp4'] 注意:一个简单的测试列表,脚本将处理未知文件名和更多文件名 所以我想找到带有成对srt文件的电影文件,并将它们放入字典中。剩下的任何东西(即movie3.mp4)都将留在列表中,稍后再处理 我一直在玩列表理解,虽然它可能不会留下剩余数据,并允许我构建字典 重新导入 匹配=[x代表x,如果(re.sub('\.srt$','\

因此,我有一份清单如下:

mylist=['movie1.mp4'、'movie2.srt'、'movie1.srt'、'movie3.mp4'、'movie1.mp4']

注意:一个简单的测试列表,脚本将处理未知文件名和更多文件名

所以我想找到带有成对srt文件的电影文件,并将它们放入字典中。剩下的任何东西(即movie3.mp4)都将留在列表中,稍后再处理

我一直在玩列表理解,虽然它可能不会留下剩余数据,并允许我构建字典

重新导入
匹配=[x代表x,如果(re.sub('\.srt$','\.mp4$',a)==x或re.sub('\.srt$','\.mp4$',a)==x),则在mylist中匹配a]

这将返回:
ValueError:要解压缩的值太多


你对我如何处理这个问题有什么想法吗?

你对你的问题采取了错误的方法。最简单的方法是确定使用的文件的基名,并根据它对它们进行分组。一种可能的方法是使用

实施

groups = {key: set(value)
      for key, value in groupby(sorted(mylist,
                                       key = lambda e: os.path.splitext(e)[0]),
                                key = lambda e: os.path.splitext(e)[0])}
示例

>>> pprint.pprint(groups)
{'movie1': set(['movie1.mp4', 'movie1.srt']),
 'movie2': set(['movie2.srt']),
 'movie3': set(['movie3.mp4'])}

你对你的问题采取了错误的方法。最简单的方法是确定使用的文件的基名,并根据它对它们进行分组。一种可能的方法是使用

实施

groups = {key: set(value)
      for key, value in groupby(sorted(mylist,
                                       key = lambda e: os.path.splitext(e)[0]),
                                key = lambda e: os.path.splitext(e)[0])}
示例

>>> pprint.pprint(groups)
{'movie1': set(['movie1.mp4', 'movie1.srt']),
 'movie2': set(['movie2.srt']),
 'movie3': set(['movie3.mp4'])}

我将把这个任务划分为不同的关注点:首先构建字典,将具有相同根名称的文件分组;稍后检查哪些文件同时包含视频和字幕文件。(请不要使用正则表达式分割文件名,
os.path
在这里做得更好)


附:你打算如何处理带有字幕的
.mkv
文件

我会将任务划分为不同的关注点:首先构建字典,将具有相同根名称的文件分组;稍后检查哪些文件同时包含视频和字幕文件。(请不要使用正则表达式分割文件名,
os.path
在这里做得更好)


附:你打算如何处理带有字幕的
.mkv
文件

这很有效。我以前没有使用过os.path.splitext;非常有用。谢谢这很有效。我以前没有使用过os.path.splitext;非常有用。谢谢