榴莲珍珠茶 2022-07-26 15:58 采纳率: 100%
浏览 38
已结题

根據TXT關鍵字複製文件(标签-list)

import os
import shutil
#ww = ['7234-0810-0859.pdf', '7324-0811-7265.pdf', '7234-0819-0725.pdf']
#test= ['7234-0810-0859_0829.pdf', '7324-0811-7265_0555.pdf','7234-0819-0725-0848.pdf','7234-0819-0788-0843']#兩個文件裡面有兩個前綴名相同的文件怎麼通過list1 list2裡的文件
requeist = e:\ww.txt
path_copy=e:\test
path_past= e:\test1
for x in list2:
#拼接出要存放的文件夹的路径
file_path = os.path.join(path_copy, x)
print(file_path)
if x in list1:
shutil.copy(path_copy.path_past)

img


img


img

並不能因為後面的字母不同 我不能實現複製

  • 写回答

2条回答 默认 最新

  • starlight_2007 2022-08-02 16:52
    关注

    根據您提供的信息,您大概是想用從文本文檔中提取的文件名關鍵詞來匹配某文件夾中的文件,並將匹配到的文件複製到另一個指定的文件夾中。
    那麼,您自己寫的代碼思路正確,建議您使用計數循環嵌套分支結構,大致結構是:

    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)卻可以快速幫您判斷錯誤所在,並告訴您怎樣糾錯。(等等,怎麼有推銷那味兒了)
    總之,您可以試試第一個代碼塊里的程序,效果還是可以的。
    以及,如果我的回答有用的話,希望您給咱一個“採納”,謝謝您嘞!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月13日
  • 已采纳回答 8月5日
  • 创建了问题 7月26日

悬赏问题

  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化
  • ¥15 Tableau online 嵌入ppt失败
  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度