1 简介
os模块提供使用操作系统相关功能的便捷方式。
2 目录结构
|-- pymodel
| |-- images
| | |-- Leon.png
| | |-- Liuxiang.png
| | |-- Lo.png
| | |-- Mac.png
| | |-- Mayun.png
| | |-- Yao.png
| | `-- secondImages
| | `--Yao.png
| `-- osTest.py
3 获取绝对路径
import os
base_dir = os.path.abspath(os.path.dirname(__name__))
# 结果
/home/xdq/xinPrj/python/pymodel
4 获取文件名称
4.1 属性
- os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
序号 | 参数 | 描述 |
---|---|---|
1 | top | 根目录下的每一个文件夹,产生一个元组(dirpath, dirnames, filenames即文件夹相对路径,文件夹名称,文件名) |
2 | topdown | 可选,True目录元组自上而下遍历,False自下而上遍历 |
3 | onerror | 可选,是函数,调用时有一个参数,一个OSError实例,报告错误后,继续walk或抛出exception终止walk |
4 | followlinks | True通过软链接访问目录 |
import os
fileInfo = os.walk("image")
print(type(fileInfo))
print(fileInfo)
# 结果:generator类,walk对象
<class 'generator'>
<generator object walk at 0x7fd5c2da1990>
4.2 获取文件夹及文件名
import os
def file_name(file_dir):
for root, dirs, files in os.walk(file_dir):
print("root:{}".format(root))
print("dirs:{}".format(dirs))
print("files:{}".format(files))
file_name("images")
# root: 相对文件路径
# dir: 文件夹
# filename: 文件名
# 结果
root:images
dirs:['secondImages']
files:['Mayun.png', 'Lo.png', 'Leon.png', 'Mac.png', 'Yao.png', 'Liuxiang.png']
root:images/secondImages
dirs:[]
files:['Yao.png']
4.3 获取文件名及扩展名
- os.path.splitext(file)
分割文件名及扩展名,返回为元组
import os
def split(file_dir):
fileNames = []
extensionNames = []
for root, dirs, files in os.walk(file_dir):
for file in files:
fileName, extensionName = os.path.splitext(file)
fileNames.append(fileName)
extensionNames.append(extensionName)
print(fileNames)
# 列表去重
extensionNames = list(set(extensionNames))
print(extensionNames)
split("images")
# 结果
file name:['Mayun', 'Lo', 'Leon', 'Mac', 'Yao', 'Liuxiang', 'Yao']
extension name:['.png']
4.4 获取当前文件夹下的所有文件及文件夹
- os.listdir(path)
返回当前当前文件夹下的所有文件及文件夹列表
import os
fileNames = os.listdir("images")
print(type(fileNames))
print("Normal order: {}".format(fileNames))
# 去除文件名后缀,排序
fileNames.sort(key=lambda x:str(x[:-4]), reverse=False)
print("Forward order: {}".format(fileNames))
# 结果
<class 'list'>
Normal order: ['Mayun.png', 'Lo.png', 'secondImages', 'Leon.png', 'Mac.png', 'Yao.png', 'Liuxiang.png']
Forward order: ['Leon.png', 'Liuxiang.png', 'Lo.png', 'Mac.png', 'Mayun.png', 'Yao.png']
4.5 拼接路径
- os.path.join(path1[,path2[, …]])
返回拼接路径列表
def join(file_dir):
joinPaths = []
for root, dirs, files in os.walk(file_dir):
for file in files:
joinPath = os.path.join(root, file)
joinPaths.append(joinPath)
print("joinPaths:{}".format(joinPaths))
join("images")
# 结果
joinPaths:['images/Mayun.png', 'images/Lo.png', 'images/Leon.png', 'images/Mac.png', 'images/Yao.png', 'images/Liuxiang.png', 'images/secondImages/Yao.png']
4.6 获取绝对路径
import os
dirname = os.path.dirname(__name__)
full_dir = os.path.abspath(dirname)
print("full directory: {}".format(full_dir))
full directory: /home/xdq/xinPrj/python/jupyter/Caffe2Pytorch
5 获取文件及文件夹大小
5.1 文件大小
import os
file_size = os.path.getsize("args.txt")
print("string size: {}bytes".format(file_size))
- 结果
string size: 49bytes
5.2 文件夹大小
import os
file_size = os.path.getsize("args.txt")
print("string size: {}bytes".format(file_size))
def size_of_dirs(dir_path):
sum_size = 0
for root, dirs, files in os.walk(dir_path):
sum_size += sum([os.path.getsize(root+"/"+file_name) for file_name in files])
return sum_size
dir_path = "./datas_test"
folder_size = size_of_dirs(dir_path)
print("folder infomation: {}bytes".format(folder_size))
- 结果
string size: 49bytes
folder infomation: 1993580bytes