python 开发 1 之 拷贝文件

news2025/4/17 9:07:35

目录

一、需求:

二、python拷贝分析

1、需要的库,及源路径、目标路径定义

2、定义的拷贝数组

3、自定义拷贝函数

1) 如果目标路径不存在时,先创建目标路径

2)遍历元组数组中的文件

3)如果源文件或目录不存在时,创建目标路径

4)split源路径、目标路径

5)若为源文件为目录,则将目录子文件夹,整体拷贝到目标路径中

6)若file为文件时,

4、自定义拷贝函数

5、主函数中调用


一、需求:

将文件和文件夹按照一定规则拷贝到另一个位置

规则如下:

BuildDir = "C:\\build2"                                      //目标文件夹

SourceDir=r"D:\biancheng\xnw2.0\xnw"         //源文件夹

# (from, to)

#   from: 以/结尾为目录,其他为文件

#   to: 空为BuildDir , 非空为BuildDir /to

 ('xnwmath.ico', 'xnwmath.ico'),

表示,将原路径下的xnwmath.ico  移动到目标文件夹下同名文件

 ('bin/logo.png', 'xnwlive/'),

表示,将logo.png, 拷贝到目标路径下xnwlive目录中

   ('bin/themes/', 'xnwlive/'),

表示,将bin/下,themes这个文件夹包括所有子文件      全部拷贝到目标路径下xnwlive文件夹中

    ('', 'xnwlive'),

表示,在目标路径下,新建xnwlive目录

  ('', 'xnwlive/intlive'),

表示,在目标路径下,新建xnwlive/intlive 目录

('bin/cef/', 'xnwlive/')

表示,将cef文件夹,整体拷贝到目标路径的xnwlive下

  ('bin\cef\**', 'xnwlive'),

两个**,表示将cef下的所有文件和子文件夹统统拷贝到目录路径的xnwlive下

  ('bin\cef\*', 'xnwlive'),

一个*,表示将cef下的所有文件拷贝到目录路径的xnwlive下,不拷贝子文件夹

二、python拷贝分析

1、需要的库,及源路径、目标路径定义

这里注意: 路径名

import os
import shutil

BuildDir = "C:\\build2"
SourceDir=r"D:\biancheng\xnw2.0\xnw"

2、定义的拷贝数组

FILES = [
    ('StartExe/StartExe/Release/StartExe.exe', '校内外.exe'),
    ('bin/校内外动态数学实验.exe', '校内外动态数学实验.exe'),
    ('xnw.ico', 'xnw.ico'),
    ('xnwmath.ico', 'xnwmath.ico'),
    ('', 'xnwlive'),

    #CEF
    ('bin\cef\**', 'xnwlive'),
    # xnwlive
    ('bin/themes/', 'xnwlive/'),
    ('bin/lang/', 'xnwlive/'),

    ('bin/dynamicMath/', 'xnwlive/'),


    ('xnwlib/bin/release/httpd.dll', 'xnwlive/'),
    ('xnwlib/bin/release/lavaagntex.dll', 'xnwlive/'),
    ('xnwlib/bin/release/cdnsapi.dll', 'xnwlive/'),
    ('xnwlib/bin/release/GsBase.dll', 'xnwlive/'),
    ('xnwlib/bin/release/blib.dll', 'xnwlive/'),
    ('bin/lava-def.ini', 'xnwlive/'),
    #('bin/ortherSet.ini', 'xnwlive/'),

    ('bin/render.exe', 'xnwlive/'),
    ('bin/xnw-live.exe', 'xnwlive/'),
    ('bin/updateVer.exe', 'xnwlive/'),
   
    ('bin/logo.png', 'xnwlive/'),
    ('bin/blackbk.png', 'xnwlive/'),

    #dll


    ('bin/avcodec-57.dll', 'xnwlive/'),
    ('bin/avdevice.dll', 'xnwlive/'),
    ('bin/avdevice-57.dll', 'xnwlive/'),
    ('bin/avfilter-6.dll', 'xnwlive/'),
    ('bin/avformat-57.dll', 'xnwlive/'),
    ('bin/avutil-55.dll', 'xnwlive/'),

    ('bin/base.dll', 'xnwlive/'),

    ('bin/clss.dll', 'xnwlive/'),
    ('bin/cos.dll', 'xnwlive/'),
    ('bin/cmps.dll', 'xnwlive/'),

    ('bin/d3dmodule.dll', 'xnwlive/'),
    ('bin/D3DX9_43.dll', 'xnwlive/'),
    ('bin/DXGIScreenCapture.dll', 'xnwlive/'),

    ('bin/engine.dll', 'xnwlive/'),
    ('bin/itrd.dll', 'xnwlive/'),

    ('bin/libwinpthread-1.dll', 'xnwlive/'),
    ('bin/libssl-1_1.dll', 'xnwlive/'),
    ('bin/libcrypto-1_1.dll', 'xnwlive/'),
    ('bin/libiconv-2.dll', 'xnwlive/'),
    ('bin/libfdk-aac-0.dll', 'xnwlive/'),
    ('bin/libstdc++-6.dll', 'xnwlive/'),
    ('bin/libgcc_s_dw2-1.dll', 'xnwlive/'),
    ('bin/libopenh264.dll', 'xnwlive/'),
    ('bin/libeay32.dll', 'xnwlive/'),
    ('bin/libx264-120.dll', 'xnwlive/'),

    ('bin/LSMediaCapture.dll', 'xnwlive/'),

    ('bin/msvcr120d.dll', 'xnwlive/'),
    ('bin/msvcr120.dll', 'xnwlive/'),
    ('bin/msvcp120.dll', 'xnwlive/'),
    ('bin/msvcp120d.dll', 'xnwlive/'),
    ('bin/msvcp140.dll', 'xnwlive/'),

    

    ('bin/NELivePlayer.dll', 'xnwlive/'),
 
    ('bin/pthreadGC-3.dll', 'xnwlive/'),

    ('bin/SDL2.dll', 'xnwlive/'),
    ('bin/swscale-4.dll', 'xnwlive/'),
    ('bin/ssleay32.dll', 'xnwlive/'), 
    ('bin/swresample-2.dll', 'xnwlive/'),
    ('bin/zlib1.dll', 'xnwlive/'),


    # xnwlive/amcap
    ('', 'xnwlive/amcap'),
    ('amcap/release/amcap.exe', 'xnwlive/amcap/'),
    ('bin/msvcr120.dll', 'xnwlive/amcap/'),
    ('bin/msvcp120.dll', 'xnwlive/amcap/'),

    # xnwlive/intlive
    ('', 'xnwlive/intlive'),
    ('intLive2.6/bin/layout/', 'xnwlive/intlive/'),
    ('intLive2.6/bin/lang/', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim_player/', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim_conf/', 'xnwlive/intlive/'),
    ('bin/msvcr120d.dll', 'xnwlive/intlive/nim_player/'),
    ('bin/msvcp120d.dll', 'xnwlive/intlive/nim_player/'),

    ('intLive2.6/bin/res/', 'xnwlive/intlive/'),
    ('intLive2.6/bin/themes/', 'xnwlive/intlive/'),

    ('intLive2.6/bin/intlive.exe', 'xnwlive/intlive/intlive.exe'),
    ('intLive2.6/bin/vcruntime140.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/directui_license.txt', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim_data_client.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim_audio_hook.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/ucrtbase.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nrtc_audio_process.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/vccorlib140.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/duilib_license.txt', 'xnwlive/intlive/'),
    ('intLive2.6/bin/concrt140.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nertc_sdk.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/image_ole.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/libssl-1_1.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/libcrypto-1_1.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/msvcp140_1.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/msvcp140_2.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim_audio.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/render.exe', 'xnwlive/intlive/'),
    ('intLive2.6/bin/msvcr120.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/logo.png', 'xnwlive/intlive/'),
    ('intLive2.6/bin/logo2.png', 'xnwlive/intlive/'),
    ('intLive2.6/bin/msvcp120.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/apisetschema.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/protoopp.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/blackbk.png', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim_tools_http.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nim_chatroom.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/nrtc.dll', 'xnwlive/intlive/'),
    ('intLive2.6/bin/msvcp140.dll', 'xnwlive/intlive/'),
    ('intLive2.6\\bin\\api-ms-*.dll', 'xnwlive\\intlive\\'),
]

FILES_DEBUG = [
    ('bin/xnw-live.pdb', 'xnwlive/'),
    ('intLive2.6/bin/intlive.pdb','xnwlive/intlive/'),
]

3、自定义拷贝函数

1) 如果目标路径不存在时,先创建目标路径

    if not os.path.isdir(outdir):
        os.mkdir(outdir)

2)遍历元组数组中的文件

    for file,dstpath in FILES + FILES_DEBUG:
        if file!='':
           file=os.path.join(SourceDir,file)

3)如果源文件或目录不存在时,创建目标路径

    ('', 'xnwlive'),

        if not file:
            _file = os.path.join(outdir, dstpath)
            os.path.isdir(_file) or os.mkdir(_file)
            continue

4)split源路径、目标路径

Split a pathname. Returns tuple "(head, tail)" where "tail" is everything after the final slash. Either part may be empty.

Slash是一个英文单词,可以表示斜线号

在计算机中,斜线号(/)也被称为正斜杠(forward slash),一般作为除法符号或者间隔符号使用,主要用于间隔使用。

        a_src = os.path.split(file)
        a_dst = os.path.split(dstpath)

示例:

file 为 'D:\\biancheng\\xnw2.0\\xnw\\xnw.ico'

split后,

a_src[0]     'D:\\biancheng\\xnw2.0\\xnw'

a_src[1]      'xnw.ico'

dstpath  为 'xnw.ico'

split后

5)若为源文件为目录,则将目录子文件夹,整体拷贝到目标路径中

若split后,[1]为空,不存在,则表示file 为目录

如:

    ('bin/themes/', 'xnwlive/'),

将themes文件夹,整体拷贝到xnwlive 下

file  :  'D:\\biancheng\\xnw2.0\\xnw\\bin/themes/'

split后

        if not a_src[1]: # 目录
            if not os.path.isdir(file):
                print('NOT EXIST: %s' % file)
                continue
            # 拷贝目录
            fname = os.path.split(a_src[0])[-1]
            _dst = os.path.join(dstpath, fname)
            shutil.copytree(file, os.path.join(outdir, _dst), dirs_exist_ok=True)

6)若file为文件时,

6.1)普通文件:

from:

      D:\\biancheng\\xnw2.0\\xnw\\xnwlib/bin/release/httpd.dll

to:  xnwlive\

     

       

            # 拷贝文件
            if a_dst[-1]: # 指定了文件
                _dst = dstpath
            else: # 只指定目录,使用源文件名
                _dst = os.path.join(dstpath, a_src[-1])
            shutil.copyfile(file, os.path.join(outdir, _dst))

指定了新文件名

   ('StartExe/StartExe/Release/StartExe.exe', '校内外.exe'),

没有指定新文件名,

 ('xnwlib/bin/release/httpd.dll', 'xnwlive/')

  D:\\biancheng\\xnw2.0\\xnw\\xnwlib/bin/release/httpd.dll

则,默认用原来的文件名一样

  _dst = os.path.join(dstpath, a_src[-1])

6.2)** 两个星号,代表拷贝这个文件下的全部文件和子文件

            if file.find("**")!=-1:
                # xcopy 拷贝文件夹 xcopy c:\windows\file d:\file /e
                cmd="xcopy %s %s /e /y" % (file,os.path.join(outdir,dstpath))
                os.system(cmd)
                continue

6.3)*一个星,代表只拷贝这个文件夹下的全部文件,不拷贝子文件夹

            if file.find("*") != -1: #如果含有统配符,用命令行copy
                # 只拷贝文件 ,不拷贝文件夹
                cmd="copy %s %s" % (file,os.path.join(outdir,dstpath))
                os.system(cmd)
                continue

6.4)系统命令拷贝

这里使用系统命令进行拷贝,相关知识点如下

在Windows中,可以使用xcopy命令来拷贝文件夹。例如,如果你想将c:\windows\file文件夹复制到d:\file文件夹,可以使用以下命令:

xcopy c:\windows\file d:\file /e

其中,/e选项表示拷贝所有子目录和文件,包括空目录。   /y  表示直接覆盖  不提示

如果你想拷贝单个文件,可以使用copy命令。例如,如果你想将c:\file.txt文件复制到d:\目录下,可以使用以下命令:

copy c:\file.txt d:\

xcopy D:\\biancheng\\xnw2.0\\xnw\\bin\\cef\\*.* C:\\build2\\Output\\xnwlive /e

4、自定义拷贝函数

    虽然上面写了很多,但实际按上述规则创建的函数却很简洁,可以参考下面函数

def copy_files(outdir):
    if not os.path.isdir(outdir):
        os.mkdir(outdir)

    for file,dstpath in FILES + FILES_DEBUG:
        if file!='':
           file=os.path.join(SourceDir,file)
       
        # 建目录
        if not file:
            _file = os.path.join(outdir, dstpath)
            os.path.isdir(_file) or os.mkdir(_file)
            continue

        a_src = os.path.split(file)
        a_dst = os.path.split(dstpath)

        if not a_src[1]: # 目录
            if not os.path.isdir(file):
                print('NOT EXIST: %s' % file)
                continue
            # 拷贝目录
            fname = os.path.split(a_src[0])[-1]
            _dst = os.path.join(dstpath, fname)
            shutil.copytree(file, os.path.join(outdir, _dst), dirs_exist_ok=True)
        else: # 文件
            if file.find("**")!=-1:
                # xcopy 拷贝文件夹 xcopy c:\windows\file d:\file /e
                cmd="xcopy %s %s /e /y" % (file,os.path.join(outdir,dstpath))
                os.system(cmd)
                continue
            if file.find("*") != -1: #如果含有统配符,用命令行copy
                # 只拷贝文件 ,不拷贝文件夹
                cmd="copy %s %s" % (file,os.path.join(outdir,dstpath))
                os.system(cmd)
                continue
            if not os.path.isfile(file):
                print('NOT EXIST: %s' % file)
                continue            
            # 拷贝文件
            if a_dst[-1]: # 指定了文件
                _dst = dstpath
            else: # 只指定目录,使用源文件名
                _dst = os.path.join(dstpath, a_src[-1])
            shutil.copyfile(file, os.path.join(outdir, _dst))

5、主函数中调用

if __name__ == '__main__':
    outdir = os.path.join(BuildDir, 'Output')
    print('===============================\ncollect files to %s ...' % outdir)
    copy_files(outdir)
    print("---end----")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/502138.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaEE初阶】多线程进阶(六)JUC 线程安全的集合类

文章目录 JUC(java.util.concurrent)的常见类Callable接口相关面试题 ReentrantLock(可重入锁)原子类信号量SemaphoreCountDownLatch 线程安全的集合类多线程环境使用 ArrayList多线程使用队列多线程使用哈希表(重点)相关面试题 J…

2.sql server数据表的管理(实验报告)

目录 一﹑实验目的 二﹑实验平台 三﹑实验内容和步骤 四﹑命令(代码)清单 五﹑运行结果 一﹑实验目的 掌握使用SQL Server管理平台和Transact-SQL语句Create table和Alter table创建和修改表的方法;掌握在SQL Server管理平台中对表进行插入、修改和删除数据操作…

哪种蓝牙耳机戴着最舒服?久戴不痛的蓝牙耳机推荐

很多喜欢跑步或通勤的时候带着耳机听音乐,而现在无线耳机市场规模扩大之后,也开始走向更加细分的市场,以满足越来越不同的差异化需求,但是佩戴的舒适度是很多人关注的,下面整理了几款佩戴舒适度高的蓝牙耳机&#xff0…

国考省考结构化面试:组织管理题,调研题,宣传题,活动题,整治题

国考省考结构化面试:组织管理题,调研题,宣传题,活动题,整治题 2022找工作是学历、能力和运气的超强结合体! 公务员特招重点就是专业技能,附带行测和申论,而常规国考省考最重要的还是申论和行测…

基于python语言dlib库和opencv库的视频眨眼检测

功能说明: 基于python编程语言,使用dlib 和opencv开发的视频眨眼检测。 环境: * python 3.6.8 * opencv 3.4.2.16 * dlib 19.7.0 原理: 1.使用opencv-python读取处理视频图像 2.使用线程机制处理人脸检测关键点 3.根…

Midjourney 5.1震撼更新!逼真到给跪,中国情侣细节惊艳,3D视频大片马上来

来源 | 新智元 作者 | 桃子,拉燕 一个月前,Midjourney V5画的一对中国完美情侣在网上爆火,让许多人纷纷惊呼画师要失业了。 恰在今天,Midjourney官宣V5能免费用了,而且还是最新版本V5.1。 各个大模型的研究测试传送门 …

Android 13 变更及适配攻略

准备工作 首先将我们项目中的 targetSdkVersion和compileSdkVersion 升至 33。 影响Android 13上所有应用 1.通知受限 对新安装的应用的影响: 如果用户在搭载 Android 13 或更高版本的设备上安装您的应用,应用的通知默认处于关闭状态。在您请求新的…

ChatGPT如何生成可视化图表-示例中国近几年出生人口

本教程收集于:AIGC从入门到精通教程汇总 ChatGPT本身不能直接生成可视化图表,但可以配合其他可视化工具或库 方法一:前端可视化开发库 Echarts(地址:Apache ECharts ) 方法二:现有Python库。…

dump_stack分析函数调用关系实例及其实现

dump_stack分析函数调用关系 文章目录 dump_stack分析函数调用关系一、dump_stack实例二、dump_stack实现分析Step 1: dump_stack_print_infoStep 2: show_stack 三、关于堆栈 一、dump_stack实例 在正点原子阿尔法开发板中查看insmod命令使用什么方法: #include …

[蓝帽杯 2022 初赛]之Misc篇(NSSCTF)刷题记录(复现)⑨

NSSCTF-Misc篇-[蓝帽杯 2022 初赛] 计算机取证:[蓝帽杯 2022 初赛]计算机取证_1[蓝帽杯 2022 初赛]计算机取证_2[蓝帽杯 2022 初赛]计算机取证_3[蓝帽杯 2022 初赛]计算机取证_4 手机取证:[蓝帽杯 2022 初赛]手机取证_1[蓝帽杯 2022 初赛]手机取证_2 网站…

使用堆视图创建3个按钮三角摆放

使用堆视图创建3个按钮三角摆放 效果如图: 分析 从效果图看,想要让3个Button呈三角摆放,需要两个堆视图完成。 首先外部一个大的“垂直堆”,垂直堆第一项放一个Button,第二项放一个“水平堆” 水平堆里再放两个But…

刚入职领导就要求做自动化测试?我懵了,从业务到框架设计总结...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 Python自动化测试&…

深度学习的环境搭建(window+pytorch)

1.检查是否安装CUDA CUDA(Compute Unified Device Architecture)是由 NVIDIA 推出的一种并行计算平台和编程模型,用于利用 NVIDIA GPU(Graphics Processing Unit)的强大计算能力进行高性能计算任务。CUDA 的主要特点是…

logstash介绍和使用-ELK文章2

官方 Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。 下载和文档:https://www.elastic.co/cn/logstash/ docker部署:https://hub.docker.…

教你快速把heic格式转化jpg,4种方法操作简单

教你快速把heic格式转化jpg的方法,因为HEIC格式图片通常出现在苹果公司的iOS 11操作系统及之后的版本中,这是因为苹果公司在这些版本中采用了HEIF(高效图像格式)作为默认的照片格式来替代JPEG格式。同时,需要注意的是&…

asp.net+sqlserver社区小区流动人口管理系统

该系统的基本功能包括用户登录,管理员信息管理,社区组织管理,常住人口管理,流动人口管理,社区事务管理,社区服务管理,系统用户管理,修改密码等功能。 (3)功能…

项目分析v2

用户: 登录: 不能重复登录。 在服务端使用一个hashset记录用户的登录状态,如果用户id不在集合里面,就可以登录,登录时将用户id添加到集合中。用户下线时,将set中的元素删除。 登录成功后,服务端…

【语义分割】LinkNet从0到1和代码实现

文章目录 前言1.网络结构1.1 网络结构示意图1.2 创建LinkNet模型 2.代码2.1 各模块搭建2.1.1 卷积模块2.1.2 反卷积模块2.1.3 编码器模块 2.2 编码网络结构2.3 损失函数&训练2.4 训练 前言 已经有了U-net了,为什么需要linkNet? unet见这个文章【语义…

Docker基础篇(很详细)

一、简单介绍 (一)为什么用docker 开发人员发开完成就发布一个jar或者war包,其他的都交给运维人员来做;而现在,开发即运维,打包部署上线一套流程走完:开发人员会将项目及其附带的环境一起打包j…

UML类图使用介绍

文章目录 一、UML图1、什么是UML图2、类图概述3、类图的作用 二、类的表示方式举个栗子 三、类与类之间关系的表示方式1、关联关系(1)单向关联(2)双向关联(3)自关联 2、聚合关系3、组合关系4、依赖关系5、继…