python获取文件及文件夹大小-燕尾夹大小型号
一、Python模块、包、标准库1.模块和包的概念
模块:在Python中,一个.py文件就是一个模块,模块让你能够有逻辑地组织你的 Python 代码段。模块能定义函数,类和变量等。
包:包是一个分层次的文件目录结构python获取文件及文件夹大小,它定义了一个由模块及子包组成的 Python 的应用环境。简单来说,包就是文件夹,但该文件夹下必须存在 __init__.py 文件, 该文件的内容可以为空。__init__.py 用于标识当前文件夹是一个包。
Python模块或包引入常用的三种形式:
◆ import module1[, module2[,... moduleN]] 直接导入整个模块或包;
◆ from modname import name1[, name2[, ... nameN]] 从包或模块导入某个模块、类、函数等;
◆ from modname import * 从某个模块导入该模块的所有内容;
2.Python Package Index (PyPI)
Python语言提供超过15万个第三方库,使用pip安装
Python包官网地址:
国内常见的镜像源站点:
➢ 阿里云:
➢ 中国科技大学:
➢ 豆瓣(douban):
➢ 清华大学:
➢ 中国科学技术大学:
3.Python 常用的标准库及第三方库
利用Python标准许库或三方库,覆盖的功能场景包括:Web框架、网络编程、网络爬虫、网络内容提取、模板引擎、数据库、数据可视化、图片处理、文本处理、自然语言处理、机器学习、日志、代码分析等。
Python标准库:
Python资源集合:
二、os模块1.处理目录、文件
os模块是Python标准库中的一个用于访问操作系统相关功能的模块,使用os模块中提供的接口,可以实现跨平台访问。
os模块的主要功能:系统相关、目录及文件操作、执行命令和管理进程
模块导入方式: import os
官方文档:
os模块中包含了一系列文件操作相关的函数,其中有一部分是Linux平台专用方法:
方法
说明
os.getcwd()
获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("..")
改变当前脚本工作目录;相当于shell下cd
os.listdir('.')
列出指定目录下的所有文件和子目录,包括隐藏文件
os.makedirs('dir1/dir2')
可生成多层递归目录
os.removedirs('dirname')
递归删除空目录(要小心)
os.mkdir('dirname')
生成单级目录
os.rmdir('dirname')
删除单级空目录,若目录不为空则无法删除并报错
os.remove('filename')
删除一个文件
os.rename("oldname","newname")
重命名文件/目录
代码示例:
import os
# 获取当前工作目录
print(os.getcwd()) # C:\auto_test\auto_test_project\api_test\demo
# 切换共工作目录,相当于cd
os.chdir('c:')
# 列出指定目录下的所有文件和子目录,包括隐藏文件
print(os.listdir('.'))
# 递归创建目录
os.makedirs(name='test_parent/test_child') # 如果目录已存在,会提示无法创建
# 递归删除空目录
os.removedirs(name='test_parent/test_child')
# 创建单级空目录
os.mkdir(path='test') # 如果目录已存在,会提示无法创建
# 删除单级空目录
os.rmdir(path='test') # 注意:非空目录无法删除
# 创建新文件
with open(file='aaa.txt', mode='w', encoding='utf-8') as f:
f.write('')
f.close()
path = 'aaa.txt'
# 判断文件是否存在
if os.path.exists(path):
# 移除单个文件
os.remove(path)
else:
raise FileNotFoundError("文件不存在")
2.os.path文件路径处理
os.path 模块不仅提供了一些操作路径字符串的方法,还包含一些或者指定文件属性的一些方法:
方法
说明
os.path.abspath(path)
返回path的绝对路径
os.path.basename(path)
获取path路径的基本名称,即path末尾到最后一个斜杠的位置之间的字符串
os.path.dirname(path)
返回path路径中的目录部分
os.path.exists(path)
判断path对应的文件是否存在,返回值为布尔值:True/False
os.path.getatime(path)
返回path所指文件的最近访问时间(浮点型秒数)
os.path.getctime(path)
返回path文件的最近修改时间(单位为秒)
os.path.getsize(path)
返回文件大小,如果文件不存在就返回错误
os.path.isabs(path)
判断是否为绝对路径
os.path.isfile(path)
判断路径是否为文件
os.path.isdir(path)
判断路径是否为目录
os.path.join(path1[,path2[,...]])
把目录和文件名合成一个路径
os.path.realpath(path)
返回path的真实路径
os.path.split(path)
把路径分割成dirname和basename,返回形式为元组
os.path.splitdrive(path)
返回驱动器名和路径,返回形式为元组,一般用在Windows下
os.path.splitext(path)
分割路径,返回路径名和文件扩展名,返回形式为元组
代码示例:
import os
'''
当前文件:os.path.py
所在目录:C:\auto_test\auto_test_project\api_test\demo
'''
# 获取当前文件的绝对路径
print(os.path.abspath(__file__)) # C:\auto_test\auto_test_project\api_test\demo\os.path.py
# 获取指定文件的真实路径
print(os.path.realpath('os.path.py')) # C:\auto_test\auto_test_project\api_test\demo\os.path.py
# 获取path路径的基本名称
print(os.path.basename('os.path.py')) # os.path.py
# 获取当前文件所在目录
print(os.path.dirname(os.path.abspath(__file__))) # C:\auto_test\auto_test_project\api_test\demo
print(os.path.abspath('.')) # C:\auto_test\auto_test_project\api_test\demo
# 获取当前文件所在目录的上一层目录
print(os.path.dirname(os.path.abspath('.'))) # C:\auto_test\auto_test_project\api_test
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) # C:\auto_test\auto_test_project\api_test
# 获取文件大小,不存在会报错
print(os.path.getsize('os.path.py')) # 1130
path1 = os.path.realpath(__file__)
# 判断是否为绝对路径
print(os.path.isabs(path1)) # True
# 判断路径是否为文件
print(os.path.isfile(path1)) # True
# 判断路径是否为目录
print(os.path.isdir(path1)) # False
path2 = os.path.abspath('多线程.py')
# 将路径分割成目录和文件名
print(os.path.split(path2)) # ('C:\\auto_test\\auto_test_project\\api_test\\demo', '多线程.py')
# 将路径分割成驱动器名和路径
print(os.path.splitdrive(path2)) # ('C:', '\\auto_test\\auto_test_project\\api_test\\demo\\多线程.py')
# 将路径分割成路径名和扩展名
print(os.path.splitext(path2)) # ('C:\\auto_test\\auto_test_project\\api_test\\demo\\多线程', '.py')
# 获取path所指文件的最近访问时间(浮点型秒数)
print(os.path.getatime(path2)) # 1676626725.4052565
# 获取path文件的最近修改时间(单位为秒)
print(os.path.getctime(path2)) # 1676336754.34521
3.执行系统命令
使用os模块中的system或者popen等方法可以执行操作系统的命令。
方法
说明
os.system(command)
运行操作系统命令,直接显示结果。但返回值是0或-1python获取文件及文件夹大小,不能获得显示在屏幕上的数据。 command是要执行的命令字符串。
os.popen(command, [mode, [bufsize]])
开启一个子进程执行command参数指定的命令,在父进程和子进程之间建立一个管道pipe,用于在父子进程间通信,并通过read()方法将命令的结果返回。
代码示例:
import os
ret1 = os.system('adb shell') # 直接在控制台打印
print(ret1) # 成功返回0,失败返回1
ret2 = os.popen(cmd='ipconfig') # 执行ipconfig命令(Windows)
print(ret2.read()) # 通过read()方法读取返回结果
执行结果如下:
另外,通过subprocess模块的getoutput()方法也可以执行系统命令:
ret3 = subprocess.getoutput('ipconfig')
print(ret3)
执行结果如下:
4.遍历目录
方法
说明
os.listdir(dir_name)
遍历目录,不递归,返回一个列表,包含该目录下的所有目录和文件 [目录, 文件]
os.walk(top,topdown=True,onerror=None)
遍历目录,递归,函数返回一个元组:(目录名, [目录列表], [文件列表])。三个元素分别是:每次遍历的路径名、路径下子目录列表、目录下文件列表
代码示例:
import os
dir_name = os.path.dirname(os.path.abspath('.'))
print(dir_name) # C:\auto_test\auto_test_project\api_test
# 遍历当前目录,不递归,返回一个列表 [目录, 文件]
print(os.listdir(dir_name))
# 递归遍历当前目录下的所有文件及目录,返回一个三元元祖(目录名, [目录列表], [文件列表])
for root, dictionary, files in os.walk(dir_name):
print("***遍历所有目录***")
for dic in dictionary:
print(dic)
print("***遍历所有目录下的文件***")
for file in files:
print(file)
运行结果如下:
同时,也可以将遍历到的文件和目录拼接起来:
# 将遍历的文件或目录和它们所在的目录拼接起来
for file in os.listdir(dir_name):
print(os.path.join(dir_name, file))
另外,也可以将遍历到的目录和文件写入txt文件:
import os
# 声明路径
dir_name = os.path.dirname(os.path.abspath('.'))
# 将遍历的文件或目录名称写入文件
# 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。
# 如果该文件不存在,创建新文件。
with open(file='files.txt', mode='w+', encoding='utf-8') as f:
for file in os.listdir(dir_name):
f.write(file)