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

2024-06-17 05:31:51 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个清单如下:

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

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

所以我想找到一个带有成对srt文件的电影文件,并把它们放到字典中。剩下的任何内容(如movie3.mp4)将保留在列表中,稍后处理。在

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

import re matches = [ x for x, a in mylist if (re.sub('\.srt$', '\.mp4$', a ) == x or re.sub('\.srt$', '\.mp4$', a ) == x) ]

这将返回: ValueError: too many values to unpack

我该怎么办?在


Tags: 文件数据re脚本内容列表字典电影
2条回答

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

实施

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])}

示例

^{pr2}$

我将任务分成几个独立的关注点:首先构建字典,用相同的根名称分组文件;然后检查哪些文件同时具有视频和字幕文件。(请不要使用regex来分割文件名,os.path在这里做得更好)。在

from collections import defaultdict
import os

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

movies = defaultdict(dict)
for filename in mylist:
    name, ext = os.path.splitext(filename)
    movies[name][ext] = filename

sub_extentions = set(['.txt', '.srt'])
movie_extensions = set(['.mp4', '.avi'])


for name, files in movies.items():
    files_set = set(files.keys())
    if not files_set & sub_extentions:
        continue # no subs
    elif not files_set & movie_extensions:
        continue # no movie
    else:
        print name, files.values()
# output: movie1 ['movie1.srt', 'movie1.mp4']

另外,你打算如何处理带有附加字幕的.mkv文件?;)

相关问题 更多 >