“使用部分相似字符串匹配列表元素 | Python 3.x”

2024-09-26 22:52:52 发布

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

我有两个列表,其中包含来自不同目录的文件名

目标是将目标目录中的文件名与源目录中的文件名同步。由于文件名包含部分相同的字符串,因此应该可以引用它们


目录1:“random original.ext”|目录2:“original.ext”

与skcript同步:

目录1:“random original.ext”|目录2:“random original.ext”


这里的“S03-ST02…”只是随机字符串的一个例子。两个文件中唯一相同的是前面的最后一部分,包括文件扩展名。下面的文件名只是一些示例-它应该在以后处理所有类型的名称

输入:

sourceFiles  = [S03-ST02-T04-VID004.mov, S01-ST01-T01-AV0203.abc, S05-ST02-T01-MOV0014.mp4]
targetFiles  = [AV0203.abc, MOV0014.mp4, VID0004.mov]

输出变量1

sourceFiles = [S01-ST01-T01-AV0203.abc, S05-ST02-T01-MOV0014.mp4, S03-ST02-T04-VID0004.mov]
targetFiles  = [AV0203.abc, MOV0014.mp4, VID0004.mov]

因此,我可以引用同一个文件(使用不同的名称),例如使用for循环:

for i in len(sourceFiles):
   sourceFiles[i]
   targetFiles[i]

输出变量2

combFileList = [(S01-ST01-T01-AV0203.abc, AV0203.abc), (S05-ST02-T01-MOV0014.mp4, MOV0014.mp4), (S03-ST02-T04-VID0004.mov, VID0004.mov)]

引用同一个文件,例如:

for i in len(combFileList):
   combFileList[i][0]
   combFileList[i][1]
   ...

我该怎么做


Tags: 文件目录文件名extmp4movabcoriginal
2条回答

像这样的

for targetFile in targetFiles:
    for sourceFile in sourceFiles:
        if sourceFile.endswith(targetFile):
            do_something(sourceFile, targetFile)

您可以在列表中使用next

sourceFiles  = ['S03-ST02-T04-VID0004.mov', 'S01-ST01-T01-AV0203.abc', 'S05-ST02-T01-MOV0014.mp4']
targetFiles  = ['AV0203.abc', 'MOV0014.mp4', 'VID0004.mov']

res = [next((x for x in targetFiles if y.endswith(x)), 'N/A') for y in sourceFiles]

产生

print(res)  # -> ['VID0004.mov', 'AV0203.abc', 'MOV0014.mp4']

相关问题 更多 >

    热门问题