如何在python中用os模块实现批量移动文件
作者:Python热爱者 发布时间:2022-07-08 20:36:40
本文介绍一下利用python批量把一个文件夹(及其子文件夹)下面的特定类型的文件移动到另一个文件夹下
通过python操作系统目录及其文件,需要用到os包,本次具体用到如下方法
os.walk(), 这个方法可以遍历一个文件夹及其子文件(子子文件夹等)
os.rename(),这个方法用于命名文件或目录(因为是操作一个文件的绝对路径,所以其实相当于对文件进行剪切操作)
另外也可以借助 shutil库对文件进行移动或复制操作
下面是示例代码
def run_main(source_dir, target_dir):
num = 0
for root, dirs, files in os.walk(source_dir, topdown=False):
# root 表示当前正在访问的文件夹路径
# dirs 表示该文件夹下的子目录名list
# files 表示该文件夹下的文件list
for name in files:
# print(os.path.join(root, name))
# print(type(os.path.join(root, name)))
file = os.path.join(root, name) # 拼接文件的完整路径(注意我们对一个文件或文件夹操作,一定要使用绝对路径)
print(file)
if file.split(".")[-1] in ["xls", "xlsx", "csv"]: # 使用split判断获得的文件路径是不是以csv结尾
# print(file)
tar_file = file.split(".")[-2]+str(num)+"."+file.split(".")[-1] # 为了避免有重名文件,给原文件名后加一个递增序号num形成新的文件名
# print(target_dir+tar_file.split("\\")[-1])
if os.path.isfile(target_dir + tar_file.split("\\")[-1]): # 判断目标文件夹是否已存在该文件
print("已经存在该文件")
else:
print("正在移动第{}个文件:{}".format(num+1, tar_file.split("\\")[-1]))
os.rename(file, target_dir + tar_file.split("\\")[-1])
num += 1
if __name__ == '__main__':
run_main("D:/source/", "D:/target/")
关于如何复制文件,还可以借助shutil
将文件内容拷贝到另一个文件中
import shutil
shutil.copyfileobj(open('old.xml','r'), open('new.xml','w'))
shutil.copyfile(src, dst)
拷贝文件
shutil.copyfile('f1.log','f2.log')#目标文件无需存在
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
shutil.copymode('f1.log','f2.log')#目标文件必须存在
shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copystat('f1.log','f2.log')#目标文件必须存在
shutil.copy(src, dst)
拷贝文件和权限
import shutil23shutil.copy('f1.log','f2.log')
shutil.copy2(src, dst)
拷贝文件和状态信息
import shutil23shutil.copy2('f1.log','f2.log')
shutil.ignore_patterns(*patterns) #基本用不到
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹
import shutil
shutil.copytree('folder1','folder2', ignore=shutil.ignore_patterns('*.pyc','tmp*'))
#目标目录不能存在,注意对folder2目录父级目录要有可写权限,ignore的意思是排除
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
import shutil
shutil.rmtree('folder1')
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
import shutil
shutil.move('folder1','folder3')
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:/tmp/data_bak =>保存至/tmp/
format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir: 要压缩的文件夹路径(默认当前目录)
owner: 用户,默认当前用户
group: 组,默认当前组
logger: 用于记录日志,通常是logging.Logger对象
#将 /data 下的文件打包放置当前程序目录
import shutil
ret = shutil.make_archive("data_bak", 'gztar', root_dir='/data')
#将 /data下的文件打包放置 /tmp/目录
import shutil
ret = shutil.make_archive("/tmp/data_bak", 'gztar', root_dir='/data')
来源:https://blog.csdn.net/qdPython/article/details/124866958


猜你喜欢
- =一、链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一
- 本文实例讲述了JS实现选项卡的方法。分享给大家供大家参考,具体如下:思路:选项卡就是点击按钮切换到相应内容,其实就是点击按钮把内容通过dis
- 结合网上的资料,自己亲自的去安装了一次MySQL,安装版本是win7x64 5.7.16。在安装过程中出现并解决了如下问题:“mysql 服
- 如何用表单在线建立目录?很简单,两个文件就搞定了:creatfolder.htm' 表单文件<form n
- 最近vue更新的2.0版本,唉,我是在2.0版本前学习的,现在更新了又要看一遍了,关键是我之前看了3个星期2.0就更新了,vux还没同步更新
- 本文实例分析了php中get_meta_tags()、CURL与user-agent用法。分享给大家供大家参考。具体分析如下:get_met
- 本文实例讲述了Node.js API详解之 Error模块用法。分享给大家供大家参考,具体如下:Node.js API详解之 ErrorNo
- PDOStatement::errorCodePDOStatement::errorCode — 获取跟上一次语句句柄操作相关的 SQLST
- 1、jsp前端<%-- Created by IntelliJ IDEA. User: Lenovo Date: 2020/6/19
- 前言当多线程访问同一个公共资源时,如果涉及到修改该公共资源的操作就可能会出现由于数据不同步导致的线程安全问题。一般情况下我们可以通过给公共资
- <%'使用说明'Dim a'Set a=new CreateExce
- declare @name varchar(50)exec sp_executesql N'select @value=姓名 fro
- 1 关于 Matplotlib 模块Matplotlib 是一个由 John Hunter 等开发的,用以绘制二维图形的 Python 模块
- 一、什么是 Postman(前世今生)Postman 诞生于 2013 年,一开始只是 Abhinav Asthana 着手于解决 API
- 首先初始化页面$(function(){ $('#archives-table').bootstrapTable
- 代码如下:登陆时记录cookies页面代码 <!--#include file="md5.asp"--&
- 第一次在自己虚机上安装mysql 中间碰到很多问题 在这里记下来,分享一下。linux centOS 6mysql版本 mysql-5.7.
- 本文实例讲述了Python迭代器与生成器基本用法。分享给大家供大家参考,具体如下:迭代器可以进行for循环的数据类型包括以下两种:1. 集合
- SQL Server中的集合运算包括UNION(合并),EXCEPT(差集)和INTERSECT(相交)三种。集合运算的基本使用1.UNIO
- 1、es的批量插入这是为了方便后期配置的更改,把配置信息放在logging.conf中用elasticsearch来实现批量操作,先安装依赖