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

后端 未结 4 1489
我在风中等你
我在风中等你 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.

提交回复
热议问题