我有两个列表,其中包含来自不同目录的文件名。
目标是将目标目录中的文件名同步到源目录中的文件名。由于文件名包含部分相同的字符串,因此应该可以引用它们。
目录1:“ random-original.ext” |目录2:“ original.ext”
与skript同步:
目录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]
...
我将如何处理?
答案 0 :(得分:1)
您可以在列表理解内使用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']
答案 1 :(得分:0)
类似这样的东西
for targetFile in targetFiles:
for sourceFile in sourceFiles:
if sourceFile.endswith(targetFile):
do_something(sourceFile, targetFile)