Python 移动文件到指定路径

2023-09-18 16:49:40

需求:将指定的文件从指定目录移动到用户指定的目标目录。

shutil 是 Python 标准库中的一个模块,它提供了许多文件和文件集合的高级操作。基本上,它可以帮助我们执行文件操作,例如复制、移动、更名和删除。它旨在与 os 模块一起使用,以提供更易于使用的接口。

import os
import shutil

# 定义要移动的文件列表
FILES = [
    "abs.c",
    "mod.c",
    "union-struct.c",
    "neg.c",
    "imod.c",
    "add.c",
    "cmp.c"
]

# 使用列表推导式替换 .c 为 .s
FILES = [filename.replace('.c', '.s') for filename in FILES]

print(FILES)
print("------------------")

# 询问用户源目录和目标目录
source_dir = input("请输入源目录的路径: ")
target_dir = input("请输入目标目录的路径: ")

# 检查源目录和目标目录是否存在
if not os.path.exists(source_dir):
    print("源目录不存在!")
elif not os.path.exists(target_dir):
    print("目标目录不存在!")
else:
    for file in FILES:
        source_path = os.path.join(source_dir, file)
        target_path = os.path.join(target_dir, file)
        
        # 检查文件是否存在于源目录
        if os.path.exists(source_path):
            # 使用 shutil.move 来移动文件
            shutil.move(source_path, target_path)
            print(f"已移动 {file}{target_dir}")
        else:
            print(f"文件 {file} 在源目录 {source_dir} 中不存在!")

    print("所有文件都已处理完毕.")

shutil.move() 是直接移动文件或目录到指定的位置。这意味着原始文件或目录将不再存在于其原始位置,而是存在于新的位置。

具体来说,shutil.move() 的工作原理是:

  1. 如果目标位置在同一文件系统上,它实际上是对原始文件或目录进行重命名。
  2. 如果目标位置在不同的文件系统上,它首先会复制原始文件或目录到目标位置,然后删除原始位置上的文件或目录。

因此,可以认为它是一个“移动”操作,而不仅仅是“拷贝”操作。


要在Python中实现文件或目录的拷贝,可以使用 shutil 模块中的 copy()copytree() 函数。

  1. 拷贝文件:
    使用 shutil.copy(src, dst)。这将从 src(源文件)拷贝到 dst(目标位置)。

    示例:

    import shutil
    
    shutil.copy("source_file.txt", "destination_folder/")
    

    注意:如果 dst 是一个目录,那么源文件将会被拷贝到这个目录下,并保持原始的文件名。

  2. 拷贝目录:
    使用 shutil.copytree(src, dst)。这将从 src(源目录)拷贝到 dst(目标位置)。目标目录 dst 不应该已经存在。

    示例:

    import shutil
    
    shutil.copytree("source_folder/", "destination_folder/")
    

以上就是在Python中拷贝文件和目录的基本方法。

更多推荐

AI绘图软件Stable Diffusion 安装和使用之二controlnet插件

本期说一下StableDiffusion非常有名的插件controlnet。同上一篇一样,我们安装b站大佬秋葉aaaki(有的网友戏称他/她是赛博佛祖)的stablediffusion4.2整合包。解压缩以后,打开启动器,见下图,界面比早期版本更好看了。​编辑​启动器打开以后,安装controlnet插件填写网址:ht

【文生图系列】如何在Stable Diffusion Webui中使用ControlNet

文章目录ControlNetStableDiffusion+ControlNet安装ControlNet插件bug例子展示参考ControlNetControlNet是一个神经网络结构,通过添加额外的条件控制扩散模型。给定任务条件,ControlNet能够提升已训练好的图像扩散模型。对于任意一个神经网络块,如下图所示,

【面试经典150 | 数组】跳跃游戏 II

文章目录写在前面Tag题目来源题目解读解题思路方法一:贪心写在最后写在前面本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更……专栏内容以分析题目为主,并附带一些对于本题涉及到的数据结构等内容进行回顾与总结,文章结构大致如下,部分内容会有增删:Tag:介绍本题牵涉到的知识点、数据结构;题目来源

软件测试/测试开发丨利用人工智能ChatGPT编写晋级报告

点此获取更多相关资料简介不管是在哪个公司,如果想要有一个长足的发展,想要获得晋升,除了平时的表现与积累,还有就是晋级答辩与晋级报告。不同的岗位,比如设计、产品、研发、测试,都有不同的答辩通道和晋级标准。一篇好的晋级报告,可以完整地体现一个人过去的工作贡献,以及未来的工作展望。而晋级报告的编写,也可以借助ChatGPT轻

微信CRM系统致力于帮助金融保险行业

在当今信息化的时代,金融保险行业面临着越来越大的竞争与挑战,那么微信CRM系统是怎么帮助金融保险行业解决问题的呢?金融保险行业面临的困难①销售管理困难,企业资源容易流失;金融保险业通过在线销售实现业务。电话销售、微信沟通难以监控管理,销售部员工流动性大,导致监管风险和客户资源流失。②客户营销困难,用户意向定位模糊;由于

《golang设计模式》第二部分·结构型模式-06-享元模式(Flyweight)

文章目录1.概述1.1角色1.2类图2.代码示例2.1设计2.2代码2.3类图示例1.概述享元(Flyweight)模式采用共享方式向客户端提供数量庞大的细粒度对象。所谓细粒度对象,是指实现了业务细节并相互独立的对象。细粒度对象是一种相对概念,一般不会进行更小粒度的拆分。1.1角色抽象享元(Flyweight):通常是

【跟小嘉学 Rust 编程】三十、Rust 使用 Slint UI

系列文章目录【跟小嘉学Rust编程】一、Rust编程基础【跟小嘉学Rust编程】二、Rust包管理工具使用【跟小嘉学Rust编程】三、Rust的基本程序概念【跟小嘉学Rust编程】四、理解Rust的所有权概念【跟小嘉学Rust编程】五、使用结构体关联结构化数据【跟小嘉学Rust编程】六、枚举和模式匹配【跟小嘉学Rust

(vue2)面经基础版-案例效果分析

配路由先配一级,一级里面配二级。一级路由:首页(二级:嵌套4个小页面)、详情页高亮a->router-link,高亮效果对自带高亮类名router-link(-exact)-active设置注:通过children配置项,可以配置嵌套子路由。并在该组件中准备路由出口<router-view></router-view>

「聊设计模式」之 设计模式的前世今生

🏆本文收录于《聊设计模式》专栏,专门攻坚指数级提升,助你一臂之力,带你早日登顶🚀,欢迎持续关注&&收藏&&订阅!目录:一、什么是设计模式设计模式的定义设计模式的作用二、设计模式的发展历程设计模式的起源设计模式的发展阶段三、设计模式的分类创建型模式结构型模式行为型模式四、常用的设计模式工厂模式单例模式装饰器模式代理模

【SpringBoot项目】SpringBoot+MyBatis+MySQL电脑商城

在b站听了袁老师的开发课,做了一点笔记。01-项目环境搭建_哔哩哔哩_bilibili基于springboot框架的电脑商城项目(一)_springboot商城项目_失重外太空.的博客-CSDN博客项目环境搭建1.项目分析1.项目功能:登录、注册、热销商品、用户管理(密码、个人信息、头像、收货地址)、购物车(展示、增加

Promise的链式调用

catch方法.catch(onRejected)=.then(null,onRejected)链式调用then方法必定会返回一个新的Promise可理解为后续处理也是一个任务新任务的状态取决于后续处理:若没有相关的后续处理,新任务的状态和前任务一致,数据为前任务的数据若有后续处理但还未执行,新任务挂起。若后续处理执行

热文推荐