Python 比较两个文件夹,返回不同文件的完整路径

Python 比较两个文件夹,返回不同文件的完整路径,python,comparison,list-comprehension,Python,Comparison,List Comprehension,我有一个脚本,可以比较文件夹和子文件夹中的文件。新文件应稍后复制。这是我用来创建列表的函数 def fullNames(source): matches = [] for root, dirnames, filenames in os.walk(source): for filename in filenames: if filename.endswith('.xlsx'): matches.append(

我有一个脚本,可以比较文件夹和子文件夹中的文件。新文件应稍后复制。这是我用来创建列表的函数

def fullNames(source):
    matches = []

    for root, dirnames, filenames in os.walk(source):
        for filename in filenames:
            if filename.endswith('.xlsx'):
                matches.append(os.path.join(root, filename))
    return matches
此函数返回如下列表:

list1 =  ['C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18\\file1.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18\\file2.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18\\file3.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18\\file4.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18\\file5.xlsx']

list2 =  ['C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17\\file1.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17\\file2.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17\\file3.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17\\file4.xlsx']
要比较这些文件,我必须比较每个文件的基本名称

list1_short = [os.path.basename(file) for file in list1]
list2_short = [os.path.basename(file) for file in list2]

result = [item for item in list1_short if item not in list2_short]
result

Out[134]: ['file5.xlsx']
这是可行的,但我需要返回该文件的完整路径,而不是basename。有人知道如何解决这个问题吗

这将是理想的结果:

['C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18\\file5.xlsx']

你可以通过改变获得结果的方式来做到这一点

result=[list1[i]表示范围内的i(len(list1_short)),如果list1_short[i]不在list2_short]

您可以通过改变获得结果的方式来实现这一点

result=[list1[i]表示范围内的i(len(list1_short)),如果list1_short[i]不在list2_short]

实际上,你可以去掉
列表2\u short

list1 =  ['C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file1.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file2.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file3.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file4.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file5.xlsx']

list2 =  ['C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file1.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file2.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file3.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file4.xlsx']


existing_names = [os.path.basename(item) for item in list2]
missing_files = [item for item in list1 if os.path.basename(item) not in existing_names]

实际上,你可以去掉
list2\u short

list1 =  ['C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file1.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file2.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file3.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file4.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-18/file5.xlsx']

list2 =  ['C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file1.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file2.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file3.xlsx',
          'C:/Users/langma/Desktop/EDI/Downloadfolder/EDI_2020-05-17/file4.xlsx']


existing_names = [os.path.basename(item) for item in list2]
missing_files = [item for item in list1 if os.path.basename(item) not in existing_names]

您可能有兴趣了解
zip()
enumerate()
函数……您可能有兴趣了解
zip()
enumerate()
函数。。。