0

python 3.x 代码(如下所列)在比较来自两个不同目录(Input_1 和 Input_2)的文件并找到匹配的文件(两个目录之间相同)方面做得很好。有没有办法可以更改现有代码(如下)以查找两个目录之间仅按名称相同的文件。(即仅按名称而不是名称+扩展名查找匹配项)?

comparison = filecmp.dircmp(Input_1, Input_2) #Specifying which directories to compare
common_files = ', '.join(comparison.common) #Finding the common files between the directories
TextFile.write("Common Files: " + common_files + '\n') # Writing the common files to a new text file
  1. 例子:
    • 目录 1 包含:Tacoma.xlsx、Prius.txt、Landcruiser.txt
    • 目录 2 包含:Tacoma.doc、Avalon.xlsx、Rav4.doc

“TACOMA”是两个不同的文件(不同的扩展名)。我可以使用 basename 或 splitext 以某种方式仅按名称比较文件并让它返回“TACOMA”作为匹配文件吗?

4

1 回答 1

1

要获取文件名,请尝试:

from os import path
fil='..\file.doc'
fil_name = path.splitext(fil)[0].split('\\')[-1]

这存储filefile_name. 因此,要比较文件,请运行:

from os import listdir , path
from os.path import isfile, join
def compare(dir1,dir2):
    files1 = [f for f in listdir(dir1) if isfile(join(dir1, f))]
    files2 = [f for f in listdir(dir2) if isfile(join(dir2, f))]
    common_files = []
    for i in files1:
        for j in files2:
            if(path.splitext(i)[0] == path.splitext(j)[0]): #this compares it name by name.
                common_files.append(i)
    return common_files

现在只需调用它:

common_files = compare(dir1,dir2)

如您所知,python 是区分大小写的,如果您想要公共文件,无论它们是否包含大写或小写,那么而不是:

if(path.splitext(i)[0] == path.splitext(j)[0]):

利用:

if(path.splitext(i)[0].lower() == path.splitext(j)[0].lower()):

你的代码工作得很好!再次感谢您,无限 TM!代码的最终使用如下,供其他人查看。(注意:Input_3 和 Input_4 是目录)

def Compare():
    Input_3 = #Your directory here
    Input_4 = #Your directory here
    files1 = [f for f in listdir(Input_3) if isfile(join(Input_3, f))]
    files2 = [f for f in listdir(Input_4) if isfile(join(Input_4, f))]
    common_files = []
    for i in files1:
        for j in files2:
            if(path.splitext(i)[0].lower() == path.splitext(j)[0].lower()):
                common_files.append(path.splitext(i)[0])

于 2020-04-08T18:26:40.553 回答