公司动态

影刀RPA 文件与文件夹操作:创建、复制、移动、删除

📅 2026/7/18 5:14:56
影刀RPA 文件与文件夹操作:创建、复制、移动、删除
影刀RPA 文件与文件夹操作创建、复制、移动、删除作者林焱RPA流程中除了操作网页和Excel还经常需要操作文件和文件夹——创建输出目录、复制模板文件、移动处理完的文件、删除临时文件。这些操作看着简单但路径写错、文件被占用、权限不足等问题经常让流程崩溃。这篇文章把文件和文件夹的常用操作讲全配合Python代码和影刀指令。一、路径操作基础1.1 路径的表示Windows路径用反斜杠\但在Python字符串中\是转义字符。处理路径有三种方式# 方式一双反斜杠pathD:\\data\\product.xlsx# 方式二正斜杠Python和Windows都支持pathD:/data/product.xlsx# 方式三raw字符串推荐pathrD:\data\product.xlsx# 方式四os.path.join最安全importos pathos.path.join(D:,data,product.xlsx)推荐用os.path.join它自动处理路径分隔符跨平台兼容。1.2 路径拼接与拆分importos pathrD:\data\product.xlsx# 拆分目录和文件名dir_nameos.path.dirname(path)# D:\datafile_nameos.path.basename(path)# product.xlsx# 拆分文件名和扩展名name,extos.path.splitext(path)# nameD:\data\product, ext.xlsx# 拼接路径new_pathos.path.join(dir_name,output,result.xlsx)# D:\data\output\result.xlsx1.3 获取路径信息importos pathrD:\data\product.xlsx# 判断路径是否存在os.path.exists(path)# True/False# 判断是文件还是目录os.path.isfile(path)# Trueos.path.isdir(path)# False![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/1f466ff767d74785b13d2ff270beeda1.png#pic_center)# 获取文件大小字节sizeos.path.getsize(path)# 获取文件修改时间importtime mtimeos.path.getmtime(path)mtime_strtime.strftime(%Y-%m-%d %H:%M:%S,time.localtime(mtime))二、文件夹操作2.1 创建文件夹importos# 创建单层目录os.mkdir(D:\\output)# 创建多层目录推荐os.makedirs(D:\\data\\output\\2026\\07,exist_okTrue)# exist_okTrue 表示目录已存在时不报错坑mkdir只能创建一层拼多多店群自动化报活动上架os.mkdir(D:\\a\\b\\c)如果D:\\a\\b不存在会报错。用os.makedirs可以递归创建。2.2 遍历文件夹importos# 列出目录下的所有文件和子目录entriesos.listdir(D:\\data)forentryinentries:full_pathos.path.join(D:\\data,entry)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/21e84911c1604f8f9dddf37317d76eda.png#pic_center)ifos.path.isfile(full_path):print(f文件:{entry})elifos.path.isdir(full_path):print(f目录:{entry})2.3 递归遍历含子目录importos# 方法一os.walkforroot,dirs,filesinos.walk(D:\\data):forfileinfiles:filepathos.path.join(root,file)print(filepath)# 方法二pathlib推荐frompathlibimportPath# 获取所有文件forfilepathinPath(D:\\data).rglob(*):iffilepath.is_file():print(filepath)2.4 按扩展名筛选文件frompathlibimportPath# 获取所有xlsx文件xlsx_fileslist(Path(D:\\data).rglob(*.xlsx))# 获取所有图片文件image_files[]forextin[*.jpg,*.png,*.gif,*.bmp]:image_files.extend(Path(D:\\data).rglob(ext))2.5 删除文件夹importosimportshutil# 删除空目录os.rmdir(D:\\empty_dir)# 递归删除目录及其所有内容慎用shutil.rmtree(D:\\data\\temp)坑shutil.rmtree不可恢复shutil.rmtree会删除目录及其所有子目录和文件而且不进回收站。使用前务必确认路径正确建议先打印要删除的文件列表确认。三、文件操作3.1 复制文件importshutil# 复制文件shutil.copy(D:\\data\\source.xlsx,D:\\backup\\source.xlsx)# 复制并保留元数据修改时间等shutil.copy2(D:\\data\\source.xlsx,D:\\backup\\source.xlsx)3.2 移动/重命名文件importshutilimportos# 移动文件shutil.move(D:\\data\\source.xlsx,D:\\output\\source.xlsx)# 重命名文件os.rename(D:\\data\\old_name.xlsx,D:\\data\\new_name.xlsx)坑移动到已存在的文件会覆盖shutil.move如果目标文件已存在会直接覆盖不提示。移动前检查目标是否存在ifnotos.path.exists(target_path):shutil.move(source_path,target_path)else:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/61f25bc8acd240bfa464af1c222c9f2f.png#pic_center)print(f目标文件已存在:{target_path})3.3 删除文件importos# 删除文件os.remove(D:\\data\\temp.txt)# 删除前检查是否存在ifos.path.exists(D:\\data\\temp.txt):os.remove(D:\\data\\temp.txt)坑文件被占用无法删除文件正被其他程序打开os.remove报错文件被占用。确保删除前关闭所有打开该文件的程序。在影刀中如果之前用【打开Excel】打开了文件需要先【关闭Excel】。3.4 批量复制文件importshutilimportosfrompathlibimportPath source_dirD:\\datatarget_dirD:\\backup# 确保目标目录存在os.makedirs(target_dir,exist_okTrue)# 复制所有xlsx文件copied_count0forfilepathinPath(source_dir).glob(*.xlsx):target_pathos.path.join(target_dir,filepath.name)shutil.copy2(str(filepath),target_path)copied_count1print(f复制完成共{copied_count}个文件)四、用影刀指令操作文件影刀也提供了文件操作的指令适合不想写Python的场景4.1 文件操作指令【复制文件】 源文件D:\data\source.xlsx 目标文件D:\backup\source.xlsx 【移动文件】 源文件D:\data\source.xlsx 目标文件D:\output\source.xlsx 【删除文件】 文件路径D:\data\temp.txt 【重命名文件】 原路径D:\data\old.xlsx 新路径D:\data\new.xlsx4.2 文件夹操作指令【创建文件夹】 文件夹路径D:\output\2026 【删除文件夹】 文件夹路径D:\temp 【获取文件列表】 文件夹路径D:\data 过滤条件*.xlsx → 输出到变量 file_list4.3 影刀指令vs Python特性影刀指令Python易用性简单直观需要写代码灵活性固定参数完全自由错误处理自动处理需手动try-catch批量操作不方便循环即可复杂逻辑不支持完全支持推荐简单操作用影刀指令批量或复杂逻辑用Python。五、实战场景5.1 按日期整理文件TEMU店群矩阵自动化运营核价报活动importosimportshutilfromdatetimeimportdatetimefrompathlibimportPath source_dirD:\\downloadstarget_baseD:\\organized# 遍历所有文件forfilepathinPath(source_dir).iterdir():ifnotfilepath.is_file():continue# 获取文件修改时间mtimeos.path.getmtime(str(filepath))date_strdatetime.fromtimestamp(mtime).strftime(%Y-%m)# 按年月创建目录target_diros.path.join(target_base,date_str)os.makedirs(target_dir,exist_okTrue)# 移动文件target_pathos.path.join(target_dir,filepath.name)shutil.move(str(filepath),target_path)print(f移动:{filepath.name}→{date_str}/)5.2 文件备份方案importshutilimportosfromdatetimeimportdatetimefrompathlibimportPath sourceD:\\data\\important.xlsxbackup_dirD:\\backup# 创建带时间戳的备份文件名timestampdatetime.now().strftime(%Y%m%d_%H%M%S)backup_namefimportant_{timestamp}.xlsxbackup_pathos.path.join(backup_dir,backup_name)# 确保备份目录存在os.makedirs(backup_dir,exist_okTrue)# 复制备份shutil.copy2(source,backup_path)# 清理超过30天的旧备份cutoff_timedatetime.now().timestamp()-30*24*3600forfilepathinPath(backup_dir).glob(important_*.xlsx):ifos.path.getmtime(str(filepath))cutoff_time:os.remove(str(filepath))print(f清理旧备份:{filepath.name})5.3 文件处理流水线importosimportshutilfrompathlibimportPath# 目录定义input_dirD:\\inputprocessing_dirD:\\processingoutput_dirD:\\outputerror_dirD:\\error# 确保所有目录存在fordin[processing_dir,output_dir,error_dir]:os.makedirs(d,exist_okTrue)# 遍历输入目录的文件forfilepathinPath(input_dir).glob(*.xlsx):filenamefilepath.nametry:# 1. 移到处理目录![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e9d0e1d4dd004985b4ab152660b4ed97.png#pic_center)proc_pathos.path.join(processing_dir,filename)shutil.move(str(filepath),proc_path)# 2. 处理文件这里调用你的处理逻辑# process_file(proc_path)# 3. 处理完成移到输出目录out_pathos.path.join(output_dir,filename)shutil.move(proc_path,out_path)print(f处理成功:{filename})exceptExceptionase:# 处理失败移到错误目录err_pathos.path.join(error_dir,filename)ifos.path.exists(proc_path):shutil.move(proc_path,err_path)print(f处理失败:{filename}, 错误:{e})5.4 监控目录变化importosimporttime watch_dirD:\\watchcheck_interval10# 10秒检查一次# 记录上次的文件列表last_filesset(os.listdir(watch_dir))whileTrue:time.sleep(check_interval)current_filesset(os.listdir(watch_dir))# 新增的文件new_filescurrent_files-last_filesifnew_files:forfinnew_files:print(f新增文件:{f})# 删除的文件removed_fileslast_files-current_filesifremoved_files:forfinremoved_files:print(f删除文件:{f})last_filescurrent_files六、避坑清单坑1路径中有空格或中文路径包含空格或中文字符时某些命令行工具可能出错。用引号包裹路径或用Python的pathlib处理自动处理特殊字符。坑2文件名包含非法字符Windows文件名不能包含\ / : * ? |。从网页提取的文本用作文件名时需要清洗importre safe_namere.sub(r[\\/:*?|],_,original_name)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/15cf606c0043423d8acf00b23439193a.png#pic_center)坑3路径太长Windows默认路径长度限制260个字符。深层嵌套目录可能导致路径超长。用\\?\前缀绕过限制long_path\\\\?\\rD:\very\long\path\...坑4文件操作没有错误处理文件可能不存在、被占用、权限不足。所有文件操作都加try-catchtry:shutil.move(source,target)exceptPermissionError:print(文件被占用)exceptFileNotFoundError:print(文件不存在)exceptExceptionase:print(f未知错误:{e})坑5相对路径的基准不确定Python的相对路径是相对于当前工作目录的不是相对于脚本文件的。用绝对路径或在脚本开头切换到脚本所在目录importos os.chdir(os.path.dirname(os.path.abspath(__file__)))![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/3dba0579ecac44e394177d54e002bd04.png#pic_center)