Python 3.x 仅按名称进行比较,而不按名称进行比较+;使用现有代码进行扩展;Python3.x

Python 3.x 仅按名称进行比较,而不按名称进行比较+;使用现有代码进行扩展;Python3.x,python-3.x,filecompare,Python 3.x,Filecompare,Python3.x代码(如下所列)在比较来自两个不同目录(Input_1和Input_2)的文件和查找匹配的文件(两个目录之间相同)方面做得非常好。是否有一种方法可以更改现有代码(如下所示),以便在两个目录之间查找名称相同的文件。(即,仅按名称查找匹配项,而不按名称+扩展名查找匹配项) 例如: 目录1包含:Tacoma.xlsx、Prius.txt、Landcruiser.txt 目录2包含:Tacoma.doc、Avalon.xlsx、Rav4.doc “TACOMA”是两个不同的文件(不

Python3.x代码(如下所列)在比较来自两个不同目录(Input_1和Input_2)的文件和查找匹配的文件(两个目录之间相同)方面做得非常好。是否有一种方法可以更改现有代码(如下所示),以便在两个目录之间查找名称相同的文件。(即,仅按名称查找匹配项,而不按名称+扩展名查找匹配项)

  • 例如:
    • 目录1包含:Tacoma.xlsx、Prius.txt、Landcruiser.txt
    • 目录2包含:Tacoma.doc、Avalon.xlsx、Rav4.doc

  • “TACOMA”是两个不同的文件(不同的扩展名)。我是否可以使用basename或splitext仅按名称比较文件,并使其返回“TACOMA”作为匹配文件?

    要获取文件名,请尝试:

    from os import path
    fil='..\file.doc'
    fil_name = path.splitext(fil)[0].split('\\')[-1]
    
    这将
    文件
    存储在
    文件名
    中。因此,要比较文件,请运行:

    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]):
    
    使用:

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


    现在检查我的答案谢谢。我把你最初的评论玩弄了一段时间,没能让它发挥作用。我会尝试一下,让你知道我的想法。Infinity TM,代码运行得非常好!再次感谢!我稍微修改了最后一行,省去了文件扩展名:common_files.append(path.splitext(I)[0])
    if(path.splitext(i)[0] == path.splitext(j)[0]):
    
    if(path.splitext(i)[0].lower() == path.splitext(j)[0].lower()):
    
    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])