compare two lists of files, ignoring file extension in one list

后端 未结 4 1496
我在风中等你
我在风中等你 2021-01-20 21:59

I have two lists

list1 = [\'image1.png\', \'image2.png\', \'image3.png\', \'image3.png\']
list2 = [\'image1.pdf\', \'image2.eps\', \'image3.ps\']

4条回答
  •  借酒劲吻你
    2021-01-20 22:10

    from os.path import splitext
    
    list1 = ['image1.png', 'image2.png', 'image3.png', 'image3.png', 'image4.png', 'image3.jpg']
    list2 = ['image1.pdf', 'image2.eps', 'image3.ps', 'image5.doc']
    
    # Create a lookup set of the document names sans extensions.
    documents = set([splitext(filename)[0] for filename in list2])
    
    # Compare each stripped filename in list1 to the list of stripped document filenames.
    matches = [filename for filename in set(list1) if splitext(filename)[0] in documents]
    
    print matches
    

    Output:

    ['image1.png', 'image2.png', 'image3.png', 'image3.jpg']
    

    Note that it would have to be adapted for files with multiple extensions like .tar.gz if needed (filename.partition(".")[0] would do the trick). But that would mean that dots cannot be put anywhere in the filename because the first dot now delimits the extension.

自定义标题
段落格式
字体
字号
代码语言
提交回复
热议问题