开发者

python实现文件拷贝到其他目录

在python中,可以使用标准库中的shutil模块实现文件拷贝。以下是一个完整的代码示例:

import shutil
import os

# 源文件路径
src_file = "source_folder/example.py"
# 目标目录路径
dst_dir = "target_folder"

# 检查目标目录是否存在,不存在则创建
os.makedirs(dst_dir, exist_ok=True)

# 构造目标文件路径
dsgVRlZIKt_file = os.path.join(dst_dir, os.patandroidh.basename(src_file))

try:
    # 执行拷贝操作(保留元数据)
    shutil.copy2(src_file, dst_file)
    print(f"文件已成功js拷贝到:{dst_file}")
except FileNotFoundError:
    print(f"错误:源文件 {src_file} 不存在")
except PermissionError:
    print("错误:权限不足,无法写入目标目录")
except Exception as e:
    print(f"拷贝过程中发生错误:{str(e)}")

关键点说明:

  • 路径处理:使用os.path.joinos.path.basename确保路径跨平台兼容
  • 目录创建os.makedirsexist_ok=True参数会自动创建目标目录
  • 保留元数据shutil.copy2会保留原始文件的创建/修改时间
  • 错误处理:捕获常见异常(文件不存在、权限问题等)

扩展功能:

1.如果要批量拷贝目录下的所有.py文件:

import glob

source_dir = "source_foandroidlder"
target_dir = "target_folder"
os.makedirs(target_dir, exist_ok=True)

for py_file in glob.glob(os.path.join(source_dir, "*.py")):
    shutil.copy2(py_file, os.path.join(target_dir, os.path.basename(py_file)))

2.拷贝多个文件到新目录

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import shutil
import os
import logging

logging.basicConfig(level=logging.INFO)

base_disk_path = "D:\\"
source_paths = [
    "/files/psPayOffRequest/31bab034-6646-4ade-bc7c-e49bb2d6e6a2.jpg",
    "/files/psPayOffRequest/0857c67a-8f48-452c-8cfe-c2461c5bd498.jpg",
    "/files/psPayOffRequest/3d36e2c1-8ae1-49f1-971f-468999541975.jpg"
]

target_directory = "d:/new_directory/"

if not os.path.exists(target_directory):
    os.makedirs(target_directory)

for source_path in source_paths:
    full_source_path = os.path.join(base_disk_path, source_path.lstrip("/"))
    file_name = os.path.basename(full_source_path)
    target_path = os.path.join(target_directory, file_name)
    logging.info(f"Copying {full_source_path} to {target_path}")
    shutil.copy(full_source_path, target_path)

3.拷贝指定文件夹或文件到指定目录

import os
import shutil
 
primary_dir = r'原始文件夹'
target_dir = r'目标文件夹'
 
 
def str_change(str):
    if not 'bin' in str:
        return str
    else:
        aa, bb = str.split('bin')
        return aa + bb
 
 
def func_copy(primary_dirjavascript, target_dir):  # 拷贝方法 把原始文件夹的所有文件夹和文件 按照同样的名字拷贝到目标文件夹中
    # 遍历filepath下所有文件,包括目录
    files = os.listdir(primary_dir)
    for i in files:  # i 是目录下的文件或文件夹
        i = os.path.join(primary_dir, i)  # 字符串拼接
        i_new = os.path.join(target_dir, i)  # 目标文件夹也要改变
        if os.path.isdir(i):  # 如果是文件夹
            if not os.path.exists(i_new):  # 如果没新建过 新建同名目标文件夹
                os.makedirs(i_new)
            func_copy(i, i_new)     # 递归循环下一个目录 复制目录里面的内容
        else: # 不是文件夹 文件 判断字符串是否有_bin 粘贴到指定位置 并且修改名字
            oldname = i
            newname = str_change(i_new)
            print(oldname)
            print(newname)
            if not os.path.exists(newname): # 如果文件不存在,存在了就不拷贝了
                shutil.copyfile(oldname, newname)
 
if __name__ == '__main__':
    func_copy(primary_dir, target_dir)

注意事项:

  • 拷贝大文件时建议使用shutil.copy2而非shutil.copy,前者会保留更完整的元数据
  • 跨文件系统拷贝时,shutil.copy2可能需要更长时间
  • 目标目录需要写入权限
  • 复制符号链接时,默认会复制链接指向的实际文件内容

这个方法在Windows/linux/MACOS均可使用,无需额外安装依赖库。

到此这篇关于python实现文件拷贝到其他目录的文章就介绍到这了,更多相关python文件拷贝内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新开发

开发排行榜