python 批量复制文件

数据库里导出了一个excel,里面包含了一些图片文件的文件名,需把对应文件要从服务器上下载,程序未提供图片批量导出功能,只是临时数据统计,需要手动把对应excel里的文件导出。

1、把excel里文件名那一列复制,粘进一个空白的文本文件,命名为filelist.txt,上传到服务器。

2、在服务器上使用脚本导出,python脚本:

fileCp.py


#! python
#coding:utf-8

##!/usr/bin/python
# Filename : fileCp.py
import sys
import os
import shutil

fileList='filelist.txt'
targetDir='files'

filedir = open(fileList)
line = filedir.readline()
log = open('running.log','w')
while line:
line = line.strip('\n');
basename = os.path.basename(line)
exists = os.path.exists(line)
if exists :
print 'copy '+line+' to '+os.getcwd()+'/'+targetDir+'/'+basename
log.write('copy '+line+' to '+os.getcwd()+'/'+targetDir+'/'+basename+'\r\n')
shutil.copy(line,targetDir+'/'+basename)
else:
print line+' not exists'
log.write(line+' not exists'+'\r\n')
line = filedir.readline()
log.close()



执行python fileCp.py
<think>嗯,用户想知道如何用Python批量复制文件到新文件夹。我需要根据提供的引用内容来给出示例代码和步骤。首先,我应该检查用户提供的引用,看看有没有相关的示例代码。 引用[4]和[5]提到了使用shutil模块的copy2方法,以及os.walk遍历文件。引用[5]中的代码示例似乎可以直接使用,但可能需要调整。用户的问题是关于批量复制,所以需要遍历源文件夹中的所有文件,包括子目录中的文件,然后复制到目标文件夹。不过用户可能希望保持目录结构还是全部复制到同一目标文件夹?根据引用[5]的示例,目标路径是直接将文件复制到目标目录,不保持结构,所以应该用这个例子。 需要确保代码中导入os和shutil模块,定义函数,然后使用os.walk遍历源目录。对于每个文件,构造源路径和目标路径,然后使用shutil.copy2复制。同时,可能需要处理文件名冲突的情况,比如如果不同子目录有同名文件复制到同一目录时会覆盖。这点需要提醒用户注意。 另外,用户可能需要目标文件夹存在,所以在复制前检查并创建目录,可以用os.makedirs(dst_dir, exist_ok=True)来确保目标存在。 然后按照步骤解释:导入模块,定义函数,处理路径,遍历复制,使用示例。还要注意路径字符串前的r防止转义。 最后,生成相关问题,比如如何处理子目录结构、排除特定文件复制后保留元数据等。这些可以基于常见的文件操作问题来设计。</think>### 使用Python批量复制文件至新文件夹的示例代码 #### 步骤说明 1. **导入模块** 使用`os`模块处理文件路径,`shutil`模块实现文件复制操作[^4][^5]。 2. **定义复制函数** 遍历源文件夹及其子文件夹,将文件复制到目标文件夹。 3. **处理路径兼容性** 使用`os.path.join`确保跨平台路径兼容性。 4. **执行复制操作** 调用`shutil.copy2`保留文件的元数据(如修改时间)。 #### 示例代码 ```python import os import shutil def batch_copy_files(src_dir, dst_dir): # 创建目标文件夹(若不存在) os.makedirs(dst_dir, exist_ok=True) # 遍历源文件夹及其子文件夹 for root, dirs, files in os.walk(src_dir): for file in files: src_path = os.path.join(root, file) dst_path = os.path.join(dst_dir, file) # 处理同名文件覆盖问题(可选) if os.path.exists(dst_path): print(f"文件 {file} 已存在,跳过复制") continue shutil.copy2(src_path, dst_path) print(f"已复制: {file} -> {dst_dir}") # 使用示例 source_folder = r"D:\source_files" # 替换为实际源路径 destination_folder = r"D:\new_folder" # 替换为实际目标路径 batch_copy_files(source_folder, destination_folder) ``` #### 关键点说明 - **路径处理**:使用原始字符串(`r""`)避免转义字符干扰[^5]。 - **同名文件处理**:代码中添加了同名文件跳过逻辑,避免覆盖(可根据需求修改为强制覆盖)。 - **元数据保留**:`shutil.copy2`会保留文件权限、修改时间等元数据。 - **子文件夹内容**:通过`os.walk`递归遍历所有子目录文件[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值