python中os模块

os模块

简介

  • os模块是与操作系统交互的一个接口
  • 导入模块: import os

操作相关


  • 工作目录相关
# 返回当前目录
os.getcwd()  # pwd

# 返回目录 . ..
os.curdir  # .
os.pardir  # ..

# 返回文件列表
os.listdir()  # ls -A
os.listdir("/")  # ls -A /

  • 目录相关
# 创建目录
os.mkdir("/tmp/mytest")  # mkdir /tmp/mytest

# 创建多层目录
os.makedirs("/tmp/aaa/bbb")  # mkdir -p /tmp/aaa/bbb

# 返回None,修改当前工作目录
os.chdir("/")  # cd /

# 删除空文件夹,注意是空文件夹
os.removedirs("a/b")  # 如果b为空,就上删除b,删除完b如果a为空,也给a删除

  • 文件相关
# 删除文件
os.remove("/tmp/a.txt")  # rm -f /tmp/a.txt

# 创建超链接
os.symlink("/etc/passwd", "mima")  # ln -s /etc/passwd mini

# 解除超链接
os.unlink("mima")  # unlink mima

  • 操作系统相关
# 返回当前目录或文件相关信息
os.stat('aaa')  # stat aaa

# 返回当前操作系统的分隔符: linux-/ win-\\
os.sep

# 返回当前操作系统的行终止符: linux-\n win-\t\n
os.linesep

# 返回当前操作系统的分割文件路径字符串: linux-: win-;
os.pathsep

# 返回当前操作系统: linux-posix win-nt
os.name

# 返回全部的环境变量,字典格式
os.environ

  • 命令交互
# 执行命令,成功返回0,失败返回1
os.system('ls ~')  # ls ~

# 返回命令执行的结果,字符串
os.popen('ls ~').read()

  • 路径相关
# 判断路径是否存在
os.path.exists('/tmp/test.txt')

# 返回目录或者文件的绝对路径
os.path.abspath('1.txt')  # realpath 1.txt

# 返回path最后的文件名
os.path.basename(('/etc/selinux/config')  # basename /etc/selinux/config

# 返回path的目录
os.path.dirname('/etc/selinux/config')  # dirname /etc/selinux/config

# 判断path是否是绝对路径,是-True,否-False
os.path.isabs('/root')

# 判断path是否是已存在的文件,是-True,否-False
os.path.isfile('/root/1.txt')

# 判断path是否是已存在的目录,是-True,否-False
os.path.isfile('/tmp')

# 获取path的最后访问时间,时间戳格式
os.path.getatime('/tmp')

# 获取path的最后修改时间,时间戳格式
os.path.getmtime('/tmp')

# 返回文件大小,目录固定是4096
os.path.getsize('1.txt')

# 路径的分割
os.path.split('/etc/selinux/config')  # ('/etc/selinux', 'config')

# 路径的拼接
os.path.join('/etc/selinux', 'config')  # '/etc/selinux/config'
os.path.join('/etc/selinux', 'config', '111')  # '/etc/selinux/config/111'

示例

  • 获取当前工作目录的绝对路径
import os, sys

print(__file__)  # __file__: 当前py文件的绝对路径
print(os.path.dirname(__file__))  # 当前py文件所在目录的绝对路径
BASE_DIR = os.path.dirname(os.path.dirname(__file__))  # 当前项目根目录的绝对路径

# 将项目根目录添加到模块的搜索路径
sys.path.append(BASE_DIR)
  • 计算目录下所有文件的大小和
# 方法一: 循环
import os


def get_size(file_path):
	size = 0
    # 判断路径是否存在
    if os.path.exists(file_path) == False:
        return size

    # file_path为文件路径
    if os.path.isfile(file_path):
        return os.path.getsize(file_path)

	# file_path为目录
    dir_list = [file_path, ]
    while dir_list:
        """ 当目录列表不为空,进行循环 """
        d = dir_list.pop()
        fp_list = os.listdir(d)  # 获取目录中的所有文件和目录
        for fp in fp_list:
            f = os.path.join(d, fp)  # 拼接路径
            if os.path.isdir(f):
                """ 当f是目录的时候,就添加到dir_list """
                dir_list.append(f)
            else:
                """ 当f不是目录,就获取它的大小 """
                size += os.path.getsize(f)
    
    return size

if __name__ == '__main__':
    res = get_size("/data")
    print(res)

# 方法二: 递归
import os


def get_size(file_path):
    size = 0
    # 判断路径是否存在
    if os.path.exists(file_path) == False:
        return size

    # file_path为文件路径
    if os.path.isfile(file_path):
        return os.path.getsize(file_path)  # 递归出口

    # file_path为目录
    f_list = os.listdir(file_path)
    for f in f_list:
        fp = os.path.join(file_path, f)
        if os.path.isdir(fp):
            """ 是目录,进入递归 """
            size += get_size(fp)
        else:
            """ 是文件,计算文件大小并添加 """
            size += os.path.getsize(fp)

    return size

if __name__ == '__main__':
    res = get_size("/data")
    print(res)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值