在python中,我可以在两个文件夹(名称)之间用特殊字符匹配文件名的一部分,然后将找到的匹配项复制到第二个文件夹中吗?

在python中,我可以在两个文件夹(名称)之间用特殊字符匹配文件名的一部分,然后将找到的匹配项复制到第二个文件夹中吗?,python,copy,special-characters,filenames,matching,Python,Copy,Special Characters,Filenames,Matching,不久前,我写了一个程序,帮助我从一个公共文件夹中为我整理文件,根据文件需要发送到的位置将文件转储到不同的文件夹中。在StackOverflow上,我得到了这里用户的慷慨帮助,我应该得到这个项目的大部分赞扬。它在文件名中搜索一个特定的词-收件人-然后将文件排序到相应的文件夹中。收件人不会更改,我可以根据需要添加他们 因此,最近我不得不从另一个文件夹添加另一个文件(称为A1),然后才能将文件发送给收件人。必须根据原始文件名称中所述的名称和姓氏匹配其他文件。这些是员工的名字,有一百多名员工。所有这些都

不久前,我写了一个程序,帮助我从一个公共文件夹中为我整理文件,根据文件需要发送到的位置将文件转储到不同的文件夹中。在StackOverflow上,我得到了这里用户的慷慨帮助,我应该得到这个项目的大部分赞扬。它在文件名中搜索一个特定的词-收件人-然后将文件排序到相应的文件夹中。收件人不会更改,我可以根据需要添加他们

因此,最近我不得不从另一个文件夹添加另一个文件(称为A1),然后才能将文件发送给收件人。必须根据原始文件名称中所述的名称和姓氏匹配其他文件。这些是员工的名字,有一百多名员工。所有这些都是PDF格式的扫描。我一直在手工操作,但我想我可以修改这个程序,找到第二个文件,并将其与原始文件一起复制

我没有取得任何进展

文件示例(我随机生成了名称):

转储到我的文件夹中的原始文件:Džafer Kapetanović-napotitev 13。čl。宜家,Einrichtungshaus-Graz.pdf

Nedim Muratović-napotitev 13。čl。阿尔迪,Vorarlberg.pdf

其他文件夹中的A1文件:Džafer Kapetanović-A1 13。čl。09.09.2020-07.08.2021.pdf

Nedim Muratović-A1 13。čl。01.01.2020-01.01.2021.pdf

因此,在发送之前,我必须将Džafer A1文件与他的原始文件进行匹配。 与Nedim的A1文件相同

所以,问题是:

  • 必须根据写入文件名的名称和姓氏将原始文件与第二个文件匹配。文件位于不同的文件夹中。A1文件都在一个文件夹中,仅在到期时更新。原始文件被转储到一个文件夹中
  • 这些名字的特点是:čćšèđ
  • 将其纳入现有计划(希望如此)
  • 我试图想出一个解决方案,我找到了算法,但我认为这太复杂了

    下面是我的代码。我把它缩减到相关的部分

    其中包含“A1”的所有内容都与新的第二个文件相关

    我觉得自己特别笨,因为基本上所有的文件名都已经被代码处理了,我不知道如何匹配这些文件以及如何将它们连接在一起

    有时文件的命名方式与我的示例不符,但名称和族名称始终位于文件名的第一位

    编辑: 如果我说服所有人将文件转储到文件夹中,在员工姓名后使用“-”符号,我可以使用该符号创建两个姓名列表。我已经把代码放在下面了。现在我想我只需要一种比较列表的方法,然后从
    A1\u文件
    中获取我需要的实际文件

    import os
    import shutil
    import pathlib
    import pprint
    import filecmp
    from os.path import join
    import re
    
    
    
    
    dir = (#Path to the folder where the originals are dumped)
    #added A1_dir to have it stored for later.
    A1_dir = (#Path to the A1 folder)
    
    
    #get the list of files
    files = os.listdir(dir)
    A1_files = os.listdir(A1_dir)
    
    name_list = []
    for filename in A1_files:
        if '-' in filename:
            file_name = filename.split('-')[0]
        else:
            file_name = filename.split('.') [0]
        if file_name not in name_list:
            name_list.append(file_name)
    
    name_list_2 = []
    for filename in files:
        if 'Posiljanje' in filename: #this is here because I wanted to see if it works the way I think it does
            print('folder')
        if '-' in filename:
            file_name = filename.split('-')[0]
        else:
            file_name = filename.split('.') [0]
        if file_name not in name_list_2:
            name_list_2.append(file_name)
    
    
        
        
        
    

    我已经解决了这个问题,但它只在文件夹中只有一个文件时有效

    编辑:多亏了,这是我所期望的。必须用
    any
    替换
    all

    以下是我目前的代码:

    import os
    import shutil
    import pathlib
    import pprint
    import filecmp
    from os.path import join
    import re
    
    
    
    
    dir = (#Path to the folder where the originals are dumped)
    #added A1_dir to have it stored for later.
    A1_dir = (#Path to the A1 folder)
    
    
    #get the list of files
    files = os.listdir(dir)
    A1_files = os.listdir(A1_dir)
    
    #generate first name list
    name_list = []
    for filename in A1_files:
        if '-' in filename:
            file_name = filename.split('-')[0]
        else:
            file_name = filename.split('.') [0]
        if file_name not in name_list:
            name_list.append(file_name)
    
    #generate second name list
    name_list_2 = []
    for filename in files:
        
        if '-' in filename:
            file_name = filename.split('-')[0]
        else:
            file_name = filename.split('.') [0]
        if file_name not in name_list_2:
            name_list_2.append(file_name)
    
    #make a list of the names that match
    matched_names = [x for x in name_list if x in name_list_2]
    #print here for now to see if it works
    print(matched_names)
    
    #copy files that have a matching name in their filenames. Currently only works with 1 file in the folder.
    for filename in A1_files:
        full_a1_filename = os.path.join(A1_dir, filename)
        if (any(name in filename for name in matched_names)):
            print("Match found:", filename)
            shutil.copy(full_a1_filename, dir)
    

    一般来说,这是一个有点太多的代码,希望有人通过在堆栈溢出问题的原因。如果可能,我会将您的问题缩小到您遇到问题的特定部分/领域。这确实有助于获得更多/更好的答案!哦我只是觉得我应该尽可能详细。我回家后会编辑这篇文章。我已经更新了文章,将其删减到我需要帮助的部分。你提供了很多描述,但没有示例。你需要与什么匹配?举一个在原始位置和其他位置的几个文件的例子,并解释您希望与什么匹配。很抱歉,感谢您指出这一点。我用例子编辑了这篇文章。