python之os模块

本文深入解析了Python中os模块的功能和应用,包括获取绝对路径、目录结构遍历、文件操作等核心功能,适合初学者和进阶开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]]])
序号参数描述
1top根目录下的每一个文件夹,产生一个元组(dirpath, dirnames, filenames即文件夹相对路径,文件夹名称,文件名)
2topdown可选,True目录元组自上而下遍历,False自下而上遍历
3onerror可选,是函数,调用时有一个参数,一个OSError实例,报告错误后,继续walk或抛出exception终止walk
4followlinksTrue通过软链接访问目录
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天然玩家

坚持才能做到极致

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值