簡體   English   中英

在python中,我可以將文件名的一部分與兩個文件夾(名稱)之間的特殊字符匹配,然后將找到的匹配項復制到第二個文件夾中嗎?

[英]In python, can I match part of a file name with special characters between two folders (names) and then copy the found match in the second folder?

不久前,我編寫了一個程序來幫助我根據文件需要發送到的位置將文件從文件轉儲到的公共文件夾中分類到不同的文件夾中。 我從 StackOverflow 上的用戶那里得到了慷慨的幫助,而davetherock值得這個程序的大部分功勞。 它會搜索文件名中的特定詞 - 收件人 - 然后將文件分類到適當的文件夾。 收件人不會更改,我可以根據需要添加它們。

所以最近我必須從不同的文件夾添加另一個文件(稱為 A1),然后才能將文件發送給他們的收件人。 這個另一個文件必須根據原始文件名中規定的名字和姓氏進行匹配。 這些是員工的名字,有一百多個員工。 所有這些都是PDF格式的掃描件。 我一直在手工完成,但我想我可以修改這個程序來找到第二個文件並將它與原始文件一起復制。

我沒有取得任何好的進展。

文件示例(我隨機生成的名稱):

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

Nedim Muratović - napotitev 13。 阿爾迪,福拉爾貝格州.pdf

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

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

所以我必須在發送之前將 Džafer A1 文件與他的原始文件匹配。 與 Nedim 的 A1 文件相同。

所以,問題:

  1. 必須根據名稱和姓氏將原始文件與第二個文件匹配,並將其寫入文件名。 文件位於不同的文件夾中。 A1 文件都在一個文件夾中,只有在到期時才會更新。 原始文件被轉儲到一個文件夾中。
  2. 這些名稱具有以下字符: č ć š ž đ
  3. 將其合並到現有程序中(希望如此)。

我試圖想出一個解決方案,我找到了Metaphone算法,但我認為這太復雜了。

下面是我的代碼。 我把它剪成相關的部分。

包含“A1”的所有內容都與新的第二個文件相關。

我覺得特別愚蠢,因為基本上所有文件名都已經由代碼處理了,我不知道如何匹配文件以及如何將它們連接在一起。

有時文件的命名方式不符合我的示例,但名稱和姓氏始終在文件名中。

編輯:如果我說服每個將文件轉儲到文件夾中的人使用員工姓名后的“-”符號,我可以使用它創建兩個姓名列表。 我把代碼放在下面。 現在我想我只需要一種比較列表的方法,然后從A1_files獲取我需要的實際文件。

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)


    
    
    

我已經解決了這個問題,但它僅在文件夾中只有一個文件時才有效。

編輯:感謝Exelian ,這按我的預期工作。 不得不用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM