在python中,我可以在两个文件夹(名称)之间用特殊字符匹配文件名的一部分,然后将找到的匹配项复制到第二个文件夹中吗?
不久前,我写了一个程序,帮助我从一个公共文件夹中为我整理文件,根据文件需要发送到的位置将文件转储到不同的文件夹中。在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文件相同 所以,问题是:在python中,我可以在两个文件夹(名称)之间用特殊字符匹配文件名的一部分,然后将找到的匹配项复制到第二个文件夹中吗?,python,copy,special-characters,filenames,matching,Python,Copy,Special Characters,Filenames,Matching,不久前,我写了一个程序,帮助我从一个公共文件夹中为我整理文件,根据文件需要发送到的位置将文件转储到不同的文件夹中。在StackOverflow上,我得到了这里用户的慷慨帮助,我应该得到这个项目的大部分赞扬。它在文件名中搜索一个特定的词-收件人-然后将文件排序到相应的文件夹中。收件人不会更改,我可以根据需要添加他们 因此,最近我不得不从另一个文件夹添加另一个文件(称为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)
一般来说,这是一个有点太多的代码,希望有人通过在堆栈溢出问题的原因。如果可能,我会将您的问题缩小到您遇到问题的特定部分/领域。这确实有助于获得更多/更好的答案!哦我只是觉得我应该尽可能详细。我回家后会编辑这篇文章。我已经更新了文章,将其删减到我需要帮助的部分。你提供了很多描述,但没有示例。你需要与什么匹配?举一个在原始位置和其他位置的几个文件的例子,并解释您希望与什么匹配。很抱歉,感谢您指出这一点。我用例子编辑了这篇文章。