根據您提供的信息,您大概是想用從文本文檔中提取的文件名關鍵詞來匹配某文件夾中的文件,並將匹配到的文件複製到另一個指定的文件夾中。
那麼,您自己寫的代碼思路正確,建議您使用計數循環嵌套分支結構,大致結構是:
for target in target_list:
for source in source_list:
if target in source:
shutil.copy(src,tgt)
這用代碼實現起來也不難。按照您的思路,我在這裡寫了一個較為完善的腳本,您可以參考。(腳本可以獨立運行,不用擔心變量等問題)。
import os
import shutil as s
from platform import system
src_file=input('請輸入存儲目標文件名的文件路徑\n\t>>[')
src_fd=input('請輸入要複製的文件所在的文件夾\n\t>>[')
tgt_fd=input('請輸入存儲複製後文件的文件夾\n\t>>[')
plt=system()
error_list=[]
done_list=[]
cc=0
if plt=='Darwin' or plt=='Linux':
punct='/'
elif plt=='Windows':
punct='\\'
else:
punct='/'
try:
with open(src_file) as f:
tgt_file_list=f.readlines()
except FileNotFoundError:
print('您輸入的文件不存在,請檢查書寫和路徑,覈實後再次運行程序。\n提示:請先退出程序。')
try:
src_file_list=os.listdir(src_fd)
except FileNotFoundError:
print('您輸入的目標文件夾不存在,請檢查書寫和路徑,覈實後再次運行程序。\n提示:請先退出程序。')
for tgt_file_name in tgt_file_list:
for src_file_name in src_file_list:
if tgt_file_name.removesuffix('\n') in src_file_name:
s.copy(f'{src_fd}{punct}{src_file_name}',f'{tgt_fd}{punct}{src_file_name}')
done_list.append(f'{tgt_fd}{punct}{src_file_name}')
cc=1
if cc!=1:
error_list.append(tgt_file_name)
if done_list!=[]:
print('已經完成拷貝,文件列表如下:')
for file in done_list:
print(f'\t{file}')
if error_list!=[]:
print('您給出的文件名中有無效文件名,這些文件名未匹配到目標文件,列表如下:')
for file in error_list:
print(f'\t{file}')
print('謝謝使用,下次再見。')
其中,核心代碼是:
import os
import shutil as s
src_file=input('請輸入存儲目標文件名的文件路徑\n\t>>[')
src_fd=input('請輸入要複製的文件所在的文件夾\n\t>>[')
tgt_fd=input('請輸入存儲複製後文件的文件夾\n\t>>[')
with open(src_file) as f:
tgt_file_list=f.readlines()
src_file_list=os.listdir(src_fd)
for tgt_file_name in tgt_file_list:
for src_file_name in src_file_list:
if tgt_file_name.removesuffix('\n') in src_file_name:
s.copy(f'{src_fd}/{src_file_name}',f'{tgt_fd}/{src_file_name}')
這幾行實現了文件名關鍵詞的提取,文件名的匹配和拷貝功能。但一旦程序出現錯誤(因文件夾不存在報FileNotFoundErro錯;因字符串不匹配而出現邏輯錯誤,一個文件也沒有複製到;因給出的文件名有錯誤而沒有匹配到目標文件等等),上一個代碼塊中令人眼花繚亂的「try:...except:...」結構以及兩個非主要的list(error_list和done_list)卻可以快速幫您判斷錯誤所在,並告訴您怎樣糾錯。(等等,怎麼有推銷那味兒了)
總之,您可以試試第一個代碼塊里的程序,效果還是可以的。
以及,如果我的回答有用的話,希望您給咱一個“採納”,謝謝您嘞!