os模块的使用方法详解
os模块
os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口;即os模块提供了非常丰富的方法用来处理文件和目录。
使用的时候需要导入该模块:import os
常用方法如下:
|
方法名 |
作用 |
|
os.remove(‘path/filename’) |
删除文件 |
|
os.rename(oldname, newname) |
重命名文件 |
|
os.walk() |
生成目录树下的所有文件名 |
|
os.chdir('dirname') |
改变目录 |
|
os.mkdir/makedirs('dirname') |
创建目录/多层目录 |
|
os.rmdir/removedirs('dirname') |
删除目录/多层目录 |
|
os.listdir('dirname') |
列出指定目录的文件 |
|
os.scandir() |
和listdir相近的功能,列出指定目录的文件 Python 官方推荐 |
|
os.getcwd() |
取得当前工作目录 |
|
os.chmod() |
改变目录权限 |
|
os.path.basename(‘path/filename’) |
去掉目录路径,返回文件名 |
|
os.path.dirname(‘path/filename’) |
去掉文件名,返回目录路径 |
|
os.path.join(path1[,path2[,...]]) |
将分离的各部分组合成一个路径名 |
|
os.path.split('path') |
返回( dirname(), basename())元组 |
|
os.path.splitext() |
返回 (filename, extension) 元组 |
|
os.path.getatime\ctime\mtime |
分别返回最近访问、创建、修改时间 |
|
os.path.getsize() |
返回文件大小 |
|
os.path.exists() |
是否存在 |
|
os.path.isabs() |
是否为绝对路径 |
|
os.path.isdir() |
是否为目录 |
|
os.path.isfile() |
是否为文件 |
遍历所有文件及文件夹
获得当前python程序运行路径
import os
print(os.getcwd()) # 输出当前代码所在模块的路径#
/Users/running/PycharmProjects/chapter04/novel
切换目录到chapter03项目下:
os.chdir('/Users/running/PycharmProjects/chapter03')
查看当前目录下的所有文件和文件夹,并判断是否是文件和文件夹
import os
files = os.listdir()
for file in files:
print(file, os.path.isdir(file),
os.path.isfile(file))
输出结果:

或者使用:
forfileinos.scandir():
print(file.name, file.path,
file.is_dir())
可以调用file.stat()获取更加详细的文件信息。如:

其中:
st_size:文件的体积大小(单位:bytes),除以1024就是KB
st_atime:文件的最近访问时间
st_mtime:文件的最近修改时间
st_ctime:Windows下表示创建时间
案例1:
1. 键盘输入一个路径
2. 统计该路径下的文件和文件夹,以及分别的数量
3. 统计当前路径下包含文件名称中包含demo的文件数量,注意不区分大小写
import ospath = input('输入要查询的路径:')
os.chdir(path)
file_list = []
dir_list = []
for file inos.scandir():
if file.is_dir():
dir_list.append(file.name)
else:
file_list.append(file.name)
print("文件夹的总量是{},\n文件为别为{}".format(len(dir_list),dir_list))
print('{}'.format('-'*30))
print("文件总量是{},\n文件为别为{}".format(len(file_list),file_list))
print('{}'.format('-'*30))
python_list = []
for name in file_list:
if'demo'in name.lower():
python_list.append(name)
print('含有python单词的文件数量有{}个,\n文件分别为{}'.format(len(python_list),python_list))
如果要遍历一个目录下的所有子目录,里面指定的文件,我们可以通过递归函数遍历每个目录进行查找或者使用os.walk(),递归实现代码如下:
import os
import sys
from stat import *
defwalktree(top, callback):for f in os.listdir(top):
pathname = os.path.join(top, f)
try:
mode = os.stat(pathname, follow_symlinks=False).st_mode
except:
continueif S_ISDIR(mode):
# directory, recurse into it
walktree(pathname, callback)
else:
# file, whatever type, make the call back function
callback(pathname)
returndefprintfile(file):
print('get to', file)
if __name__ == '__main__':
if (os.path.isabs(sys.argv[1]) and
os.path.exists(sys.argv[1])):
walktree(sys.argv[1], printfile)
Python os模块的walk()函数,顾名思义,就是用来遍历目录树的,此函数可以很方便的遍历以输入的路径为root的所有子目录和其中的文件。
walk函数是一个Python生成器(generator),调用方式是在一个for...in...循环中,walk生成器每次返回的是一个含有3个元素的tuple,分别是 (dirpath, dirnames, filenames)
fordirpath, dirnames, filesinos.walk('./'):
print(dirpath,dirnames,files)
当然也可以使用glob模块快速实现,假设要获取主目录中所有的mp4文件:

此时使用glob更加方便
import glob
t_list = glob.glob('t*')
print(t_list) # 获取当前目录下t开头的文件,但是不能获取子文件夹里面的内容
Python的glob还支持**规则(从3.5开始),当**规则与另一个参数recursive=True配合的时候,可以深入的路径的子目录当中去匹配:
glob.glob('**') # 获取当前目录的文件和文件夹
glob.glob('**/') # 获取当前目录的文件夹# 如果**结合recursive=True使用,但是如果结合一个*则不能实现递归
glob.glob('**/',recursive=True) # 可以遍历出所有的子目录# 若要获取子目录中的文件则需要
glob.glob('**/*.mp4',recursive=True)
案例2:
1. 键盘输入一个路径
2. 搜索该路径下文件大小超过50M的zip文件
3. 搜索该路径下最后修改日期在30天前的文件
4. 打印显示2,3的文件
import os
import datetime
path = input('输入要查询的路径:')
os.chdir(path)
paths = glob.glob('**/*.zip',recursive = True)
forpathin paths:
file_size = os.stat(path).st_size/1024/1024
file_modify = datetime.datetime.fromtimestamp(os.stat(path).st_mtime)
days = (datetime.datetime.now() - file_modify).days
if (file_size > 50) and (days > 30):
print('压缩包的路径名称是:{},大小为{:.2f}MB,创建文件年份为:{}'.format(path,file_size,file_build_year))
批量操作文件及文件夹
创建文件夹和多层文件夹
import osifnotos.path.exists('新文件夹名'):
os.mkdir('新文件夹名')
# 创建多层文件夹
os.makedirs('第一层文件夹/第二层文件夹/第三层文件夹')
复制文件或者文件夹
复制、移动、删除文件夹需要借助另一个模块:shutil模块
# 首先导入模块import shutil
import os
shutil.copy('文件名', '目标文件夹') # 将文件复制到指定文件夹
shutil.copy('文件名', '目标文件夹/新文件名.txt') # 复制并重命名文件#如果复制的是文件夹
shutil.copytree('源文件夹','目标文件夹')
# 如果不想复制文件而是移动文件,可以使用过move方法 使用方法类似copy,也可以移动文件夹
shutil.move('文件名', '目标文件夹/')
shutil.move('源文件夹','目标文件夹/') # 文件夹后面记住最后加斜杠/# 若要删除文件夹
shutil.rmtree('文件夹名')
# 删除文件
os.remove('文件名')
案例3:
1. 键盘输入一个路径
2. 获取里面所有的mp4文件
3. 重命名mp4文件在每个文件前面添加前缀,前缀就是文件最后修改的年月日(如:2021-08-18_西游记01.mp4)
4. 新建文件夹:最新视频
5. 将重命名的视频批量移动到最新视频文件夹
import os
import datetime
import shutil
import glob
path = input('输入要查询的路径:')
os.chdir(path)
ifnotos.path.exists('最新视频'):
os.mkdir('最新视频')
for dirpath,dirnames,files inos.walk('./'):
for file inos.scandir(dirpath):
if file.name.endswith(".mp4"):
tm = datetime.datetime.fromtimestamp(file.stat().st_mtime)
new_file = str(tm.year)+'-'+str(tm.month)+'-'+str(tm.day)+'-'+file.name
os.rename(dirpath + '/' + file.name,new_file)
file_ls = glob.glob('*.mp4')
for name in file_ls:
shutil.move(name,'最新视频/')
print('over!!!')
os模块的使用方法详解的更多相关文章
- socket模块的getaddrinfo方法详解
getaddrinfo方法用于通过url解析dns import sys,socket def dns_resolver(url): result = socket.getaddrinfo(url, ...
- Python基础之 urllib模块urlopen()与urlretrieve()的使用方法详解。
Python urllib模块urlopen()与urlretrieve()的使用方法详解 1.urlopen()方法urllib.urlopen(url[, data[, proxies]]) ...
- python中requests库使用方法详解
目录 python中requests库使用方法详解 官方文档 什么是Requests 安装Requests库 基本的GET请求 带参数的GET请求 解析json 添加headers 基本POST请求 ...
- Python 字符串方法详解
Python 字符串方法详解 本文最初发表于赖勇浩(恋花蝶)的博客(http://blog.csdn.net/lanphaday),如蒙转载,敬请保留全文完整,切勿去除本声明和作者信息. ...
- PHP cURL应用实现模拟登录与采集使用方法详解
对于做过数据采集的人来说,cURL一定不会陌生.虽然在PHP中有file_get_contents函数可以获取远程链接的数据,但是它的可控制性太差了,对于各种复杂情况的采集情景,file_get_co ...
- Android ActionBar 关于tab的应用 以及 TabListener的方法详解
actionBar的tab标签应用以及TabListener的方法详解 package com.example.actionBarTest.actionBarTab; import android.a ...
- asp.net iis URLRewrite 实现方法详解
原文 asp.net iis URLRewrite 实现方法详解 实现非常简单首先你要在你的项目里引用两个dll:actionlessform.dll.urlrewriter.dll,真正实现重写的是 ...
- PHP cURL实现模拟登录与采集使用方法详解教程
来源:http://www.zjmainstay.cn/php-curl 本文将通过案例,整合浏览器工具与PHP程序,教你如何让数据 唾手可得 . 对于做过数据采集的人来说,cURL一定不会陌生.虽然 ...
- telnet 命令使用方法详解,telnet命令怎么用
telnet 命令使用方法详解,telnet命令怎么用? 文章类型:电脑教程 原创:天诺时空 什么是Telnet? 对于Telnet的认识,不同的人持有不同的观点,可以把Telnet当成一种通信协 ...
- php调用C代码的方法详解和zend_parse_parameters函数详解
php调用C代码的方法详解 在php程序中需要用到C代码,应该是下面两种情况: 1 已有C代码,在php程序中想直接用 2 由于php的性能问题,需要用C来实现部分功能 针对第一种情况,最合适的方 ...
随机推荐
- Java基础学习:3、数组
1.三种声明方式: // 创建一个double数据类型的数组,长度为5 double array[] = new double[5]; // 创建int数据类型数组,长度为6 int age[] = ...
- Linux 使用Apache服务部署静态网站
网站服务程序 我们平时访问的网站服务就是Web网络服务,一般是指允许用户通过浏览器访问到互联网中各种资源的服务.如图所示,Web网络服务是一种被动访问的服务程序,即只有接收到互联网中其他主机发出的请求 ...
- Jenkins启动失败的七个问题
1.jdk版本和路径问题(注意第6个问题) which java vim /etc/init.d/jenkins 2.用户名问题 查看/etc/sysconfig/jenkins的JENKINS_US ...
- 安卓蓝牙协议栈中的RFCOMM状态机分析
1.1 数据结构 1.1.1 tRFC_MCB tRFC_MCB(type of rfcomm multiplexor control block的简写)代表了一个多路复用器.代表了RFCOMM规范 ...
- 使用cpu-z简单看处理器,显卡等
心血来潮想了解一下自己的电脑.在网上搜索cpu-z,大小只有几百kb.下面以我自己电脑为例,上图: 某些地方我也不是很了解,不太了解的我就直接跳过了.在网上查阅相关资料后,有下面的认识: (1)处理器 ...
- kali2020-bash: openvas-setup:未找到命令 ,解决办法
将openvas-setup命令换成 gvm-setup命令即可
- 【xUtils框架问题】xUtils继承基类的x.view().inject(this)绑定点击事件@Event无效
由于看得教程里的xUtils比较老了,不知道什么版本的. 还是使用ViewUtils.inject()进行绑定反射的,使用@OnClick进行点击监听绑定的. 3.9.0版本的xUtils使用: x. ...
- vins-fusion(1)安装编译
https://github.com/HKUST-Aerial-Robotics/VINS-Fusion https://blog.csdn.net/haner27/article/details/1 ...
- 内部类(Java)
内部类 基本介绍 概念:在一个类的内部再定义一个完整类 特点:编译之后可生成独立的字节码文件:内部类可以直接访问外部类的私有属性,不破坏封装性 分类:成员内部类:静态内部类:局部内部类:匿名内部类 p ...
- Android 自定义View (三)
一.前言 上节 讲解了旋转圆环基本的实现方法.本文将在此基础上进一步改进,在属性文件中自定义控件属性,避免代码中显式调用setXXX() 方法. 二.流程 首先,在资源文件 values 中新建一个 ...