当前位置: 首页 > news >正文

Python:复制、移动文件到指定文件夹

需要考虑的问题:

  • 指定文件夹是否存在,不存在则创建
  • 在指定文件夹中是否存在同名文件,是覆盖还是另存为
import os
import shutil
import tracebackdef copyfile(srcfile, dstpath, replace=False):"""复制文件到指定文件夹@param srcfile: 原文件绝对路径@param dstpath: 目标文件夹@param replace: 如果目标文件夹已存在同名文件,是否覆盖"""try:if not os.path.isfile(srcfile):print("%s not exist!" % (srcfile))else:fpath, fname = os.path.split(srcfile)  # 分离文件名和路径suffix = os.path.splitext(srcfile)[-1]# print(fpath, fname, suffix)if not os.path.exists(dstpath):os.makedirs(dstpath)  # 创建路径if replace:dstfile = os.path.join(dstpath, fname)shutil.copy(srcfile, dstfile)  # 复制文件print("copy %s -> %s" % (srcfile, dstfile))else:i = 1while True:add = ' (%s)' % str(i) if i != 1 else ''dstfile = os.path.join(dstpath, fname.replace(suffix, add + suffix))if os.path.exists(dstfile) and i <= 10:i += 1else:shutil.copy(srcfile, dstfile)  # 复制文件print("copy %s -> %s" % (srcfile, dstfile))breakreturn dstfileexcept Exception as e:print('文件复制失败', srcfile)traceback.print_exc()
import os
import shutil
import tracebackdef movefile(srcfile, dstpath, replace=False):"""移动文件到指定文件夹@param srcfile: 原文件绝对路径@param dstpath: 目标文件夹@param replace: 如果目标文件夹已存在同名文件,是否覆盖"""try:if not os.path.isfile(srcfile):print("%s not exist!" % (srcfile))else:fpath, fname = os.path.split(srcfile)  # 分离文件名和路径suffix = os.path.splitext(srcfile)[-1]# print(fpath, fname, suffix)if not os.path.exists(dstpath):os.makedirs(dstpath)  # 创建路径if replace:dstfile = os.path.join(dstpath, fname)shutil.move(srcfile, dstfile)  # 复制文件print("move %s -> %s" % (srcfile, dstfile))else:i = 1while True:add = ' (%s)' % str(i) if i != 1 else ''dstfile = os.path.join(dstpath, fname.replace(suffix, add + suffix))if os.path.exists(dstfile) and i <= 10:i += 1else:shutil.move(srcfile, dstfile)  # 复制文件print("move %s -> %s" % (srcfile, dstfile))breakexcept Exception as e:print('文件移动失败', srcfile)traceback.print_exc()

复制文件到指定文件夹V2:

  1. 判断源文件是否存在
  2. 判断目标文件夹是否存在
  3. 判断是否已存在该文件
  4. 判断已存在文件是否打开
  5. 判断是否需要替换掉已存在文件

注意:复制文件会改变时间属性(创建日期、修改日期),不再是源文件的时间属性

import os
import shutil
import tracebackdef copyfile(srcfile, dstpath, replace=False):"""复制文件到指定文件夹@param srcfile: 原文件绝对路径@param dstpath: 目标文件夹@param replace: 如果目标文件夹已存在同名文件,是否覆盖"""try:# 判断源文件是否存在assert os.path.isfile(srcfile), "源文件不存在"basename = os.path.basename(srcfile)fname = os.path.splitext(basename)[0]  # 不带后缀的文件名suffix = os.path.splitext(srcfile)[-1]# 判断目标文件夹是否存在if not os.path.exists(dstpath):os.makedirs(dstpath)  # 创建文件夹,可递归创建文件夹,可能创建失败# 判断目标文件夹是否存在assert os.path.exists(dstpath), "目标文件夹不存在"# 开始尝试复制文件到目标文件夹i = 0while True:i += 1add = '(%s)' % str(i) if i != 1 else ''dstfile = os.path.join(dstpath, fname + add + suffix)opened_dstfile = os.path.join(dstpath, '~$' + fname + add + suffix)  # 已打开文件# 判断目标文件夹是否存在该文件if not os.path.exists(dstfile):shutil.copy(srcfile, dstfile)  # 不存在则复制文件break# 存在该文件,则判断已存在文件是否打开if os.path.exists(opened_dstfile):# 已打开则创建下一个新文件continue# 已存在文件没有打开的情况if replace:shutil.copy(srcfile, dstfile)  # 复制文件break# 不覆盖已存在文件,则创建下一个新文件return dstfileexcept AssertionError as e:print('文件复制失败', e, srcfile)except Exception as e:print('文件复制失败', e, srcfile)if __name__ == "__main__":srcfile = r"C:\Users\Administrator\Desktop\源文件夹\test.txt"dir = r"C:\Users\Administrator\Desktop\目标文件夹"print(copyfile(srcfile, dir, replace=True))

Python复制文件到指定文件夹,遇到相同文件名的处理

https://www.cnblogs.com/johnthegreat/p/12748790.html

python复制、移动文件到指定文件夹_python移动文件到指定文件夹-CSDN博客

文件侠告诉你,Python复制文件的N种姿势! - 云+社区 - 腾讯云

http://www.lryc.cn/news/263952.html

相关文章:

  • 类和对象(中篇)
  • 简单几步完成SVN的安装
  • NFS原理详解
  • 查询后矩阵的和
  • Flutter实现丝滑的滑动删除、移动排序等-Dismissible控件详解
  • JDK bug:ciObjectFactory::create_new_metadata:原因完全解析
  • 【数据结构】并查集的简单实现,合并,查找(C++)
  • 2023美团商家信息
  • 0155 - Java 数组
  • Java 语言有哪些特点
  • SAP 特殊采购类50简介----虚拟件
  • C语言——内存函数的使用与模拟实现
  • Mysql索引事务(面试高频)
  • SpringCloudGateway 3.1.4版本 Netty内存泄漏问题解决
  • STM32内部是怎么工作的
  • MyBatis的配置文件
  • MCU平台下确定栈空间大小的方法
  • Flink系列之:SQL提示
  • 机器学习算法---聚类
  • gitlab ci pages
  • Web ML 库的Transformers.js 提供文本转语音功能
  • 管理类联考——数学——真题篇——按题型分类——充分性判断题——蒙猜E
  • 【Linux基本指令(2)】
  • Debian系统设置SSH密钥登陆
  • uniapp cli开发和HBuilderX开发
  • 【Java异常】idea 报错:无效的目标发行版:17 的解决办法
  • 代码提交规范-ESLint+Prettier+husky+Commitlint
  • 手动实现 Vue 3的简易双向数据绑定(模仿源码)
  • LVS最终奥义之DR直接路由模式
  • t-SNE高维数据可视化实例