深入理解 Python 操作系统的 14 个 API

开发 后端 系统
本文详细介绍了os模块中的14个常用API,包括了文件和目录的基本操作、路径检查以及目录树的遍历等功能。

大家好!今天我们要聊的是Python中的操作系统模块——os。这个模块提供了很多有用的函数,帮助我们更好地与操作系统交互。无论是文件操作还是进程管理,os模块都能提供强大的支持。本文将带你一步步了解并掌握14个常用的os模块API。

1.os.name

首先,让我们看看os.name。这个属性会返回当前运行Python脚本的操作系统名称。这对于编写跨平台的代码非常有用,因为你可以通过它来判断用户正在使用哪种操作系统。

代码示例:

import os

print("当前操作系统名称:", os.name)

输出:如果你在Windows上运行这段代码,输出将是 "nt";而在Linux或Mac OS上则是 "posix"。

2.os.getcwd()

接下来是os.getcwd(),它用来获取当前工作目录的路径。这对于处理文件路径特别有帮助。

代码示例:

import os

print("当前工作目录:", os.getcwd())

输出:例如,假设你的脚本位于C:\Users\YourName\Documents目录下,那么输出将会是这个路径。

3.os.chdir(path)

os.chdir(path)可以改变当前的工作目录到指定路径。这对于需要在不同目录间切换的脚本来说非常实用。

代码示例:

import os

# 改变到新的工作目录
os.chdir('C:\\temp')
print("新工作目录:", os.getcwd())

输出:如果C:\temp存在,那么输出就是该路径。

4.os.listdir(path='.')

os.listdir(path='.')返回指定目录下的所有文件和目录名。默认参数'.'表示当前目录。

代码示例:

import os

files = os.listdir('.')
for f in files:
    print(f)

输出:这会列出当前目录下的所有文件和子目录。

5.os.mkdir(path)

os.mkdir(path)用于创建一个新目录。这是一个非常基础但重要的功能。

代码示例:

import os

# 创建新目录
os.mkdir('new_directory')
print("新目录已创建")

输出:你会看到命令行提示“新目录已创建”,同时在你的工作目录中会出现一个名为new_directory的新目录。

6.os.makedirs(path)

os.makedirs(path)类似于os.mkdir(),但它可以创建多级目录。

代码示例:

import os

# 创建多级目录
os.makedirs('parent/child/subchild')
print("多级目录已创建")

输出:即使parent和child不存在,上述代码也会创建完整的路径。

7.os.rmdir(path)

os.rmdir(path)用来删除空目录。记住,只有当目录为空时,这个函数才能成功执行。

代码示例:

import os

# 删除空目录
os.rmdir('new_directory')
print("目录已删除")

输出:如果new_directory是空的,那么它会被删除,并打印出相应的信息。

8.os.remove(path)

os.remove(path)用于删除指定路径下的文件。这是一个危险的操作,请务必小心使用!

代码示例:

import os

# 删除文件
os.remove('test.txt')
print("文件已删除")

输出:如果test.txt存在,那么它会被删除,并显示删除成功的信息。

9.os.path.exists(path)

os.path.exists(path) 用于检查指定路径是否存在。这是非常常用的一个功能,特别是在处理文件和目录时。

代码示例:

import os

path = 'example.txt'
if os.path.exists(path):
    print(f"{path} 存在")
else:
    print(f"{path} 不存在")

输出:如果 example.txt 文件存在,则输出 “example.txt 存在”;否则输出 “example.txt 不存在”。

10.os.path.isdir(path)

os.path.isdir(path) 用于检查指定路径是否为目录。这在处理文件系统时非常有用。

代码示例:

import os

path = 'example_directory'
if os.path.isdir(path):
    print(f"{path} 是目录")
else:
    print(f"{path} 不是目录")

输出:如果 example_directory 存在并且是一个目录,则输出 “example_directory 是目录”;否则输出 “example_directory 不是目录”。

11.os.path.isfile(path)

os.path.isfile(path) 用于检查指定路径是否为文件。与 os.path.isdir() 类似,这也是一个非常基础且常用的功能。

代码示例:

import os

path = 'example.txt'
if os.path.isfile(path):
    print(f"{path} 是文件")
else:
    print(f"{path} 不是文件")

输出:如果 example.txt 存在并且是一个文件,则输出 “example.txt 是文件”;否则输出 “example.txt 不是文件”。

12.os.path.getsize(path)

os.path.getsize(path) 返回指定文件的大小(以字节为单位)。这对于获取文件占用的空间非常有用。

代码示例:

import os

path = 'example.txt'
if os.path.isfile(path):
    size = os.path.getsize(path)
    print(f"{path} 的大小为 {size} 字节")
else:
    print(f"{path} 不存在或不是文件")

输出:如果 example.txt 存在并且是一个文件,则输出其大小;否则输出相应的错误信息。

13.os.rename(src, dst)

os.rename(src, dst) 用于重命名文件或移动文件/目录。这是一个非常实用的功能,尤其是在处理大量文件时。

代码示例:

import os

src = 'old_name.txt'
dst = 'new_name.txt'

if os.path.exists(src):
    os.rename(src, dst)
    print(f"{src} 已重命名为 {dst}")
else:
    print(f"{src} 不存在")

输出:如果 old_name.txt 存在,则将其重命名为 new_name.txt 并输出相关信息;否则输出错误信息。

14.os.walk(top, topdown=True, onerror=None, followlinks=False)

os.walk(top, topdown=True, onerror=None, followlinks=False) 是一个非常强大的函数,用于遍历目录树。它可以生成目录树中的文件名,在目录树中递归地进行遍历。

代码示例:

import os

top = 'example_directory'
for root, dirs, files in os.walk(top):
    print(f"目录: {root}")
    for dir in dirs:
        print(f"  子目录: {os.path.join(root, dir)}")
    for file in files:
        print(f"  文件: {os.path.join(root, file)}")

输出:这段代码会遍历 example_directory 及其子目录,并打印出所有的子目录和文件路径。

实战案例:备份文件夹

现在,让我们通过一个实际的场景来综合运用这些API。假设你需要备份某个目录及其所有子目录和文件。我们可以使用 os 模块来实现这个功能。

代码示例:

import os
import shutil

def backup_directory(source_dir, backup_dir):
    if not os.path.exists(backup_dir):
        os.makedirs(backup_dir)

    for root, dirs, files in os.walk(source_dir):
        relative_path = os.path.relpath(root, source_dir)
        target_path = os.path.join(backup_dir, relative_path)
        
        if not os.path.exists(target_path):
            os.makedirs(target_path)

        for file in files:
            source_file = os.path.join(root, file)
            backup_file = os.path.join(target_path, file)
            shutil.copy2(source_file, backup_file)

source_directory = 'example_directory'
backup_directory = 'backup_directory'

backup_directory(source_directory, backup_directory)
print(f"{source_directory} 已备份到 {backup_directory}")

输出:这段代码会将 example_directory 及其所有子目录和文件备份到 backup_directory 中,并输出相应的信息。

总结

本文详细介绍了os模块中的14个常用API,包括了文件和目录的基本操作、路径检查以及目录树的遍历等功能。通过这些API,我们可以更方便地处理各种文件系统相关的任务。希望这些知识能够帮助你更加高效地使用Python进行开发。

责任编辑:赵宁宁 来源: 手把手PythonAI编程
相关推荐

2022-02-21 16:57:13

APIIDE构建系统

2020-12-26 16:51:12

Python操作符开发

2018-04-16 11:04:23

HBaseRegion Serv数据库

2022-10-08 07:49:55

New操作符函数

2023-02-10 08:11:43

Linux系统调用

2022-09-01 08:08:35

Android移动操作系统

2021-10-14 06:27:41

Python函数开发

2016-12-08 15:36:59

HashMap数据结构hash函数

2020-07-21 08:26:08

SpringSecurity过滤器

2010-06-01 15:25:27

JavaCLASSPATH

2018-01-22 17:02:48

Python字符编码ASCII

2012-11-22 10:11:16

LispLisp教程

2021-09-01 13:32:48

Node.jsAPI POSIX

2018-11-30 10:00:53

Python字符串编程语言

2016-11-07 21:59:52

threadpython

2016-08-31 15:50:50

PythonThreadLocal变量

2017-01-10 08:48:21

2024-02-21 21:14:20

编程语言开发Golang

2019-06-25 10:32:19

UDP编程通信

2017-08-15 13:05:58

Serverless架构开发运维
点赞
收藏

51CTO技术栈公众号