Python `os` / `sys` / `shutil` 模块:系统级操作的极限运用

Python os / sys / shutil 模块:系统级操作的极限运用 (讲座模式)

各位朋友们,大家好!我是今天的讲师,一个和Python打了多年交道的老码农。今天咱们不聊高深莫测的算法,也不谈玄之又玄的架构,咱们就来点实在的——聊聊Python里那些能让你直接和操作系统“对话”的模块:ossysshutil

别看它们的名字朴实无华,但它们的功能强大到超乎你的想象。有了它们,你可以像一个操作系统管理员一样,轻松管理你的文件、目录,甚至控制程序的运行。所以,准备好,咱们要开始一场系统级操作的“极限运动”了!

第一幕:os 模块 – 我是你的文件总管

os 模块,可以理解为 “operating system” 的缩写,它就像一个万能遥控器,让你在 Python 代码里直接控制操作系统。无论你是想创建目录、删除文件、还是获取环境变量,os 模块都能帮你搞定。

1. 文件和目录操作:基础中的基础

  • os.getcwd():告诉你现在在哪儿

    import os
    
    current_directory = os.getcwd()
    print(f"当前工作目录是:{current_directory}")

    这个函数就像你的 GPS,告诉你当前 Python 脚本运行的目录。

  • os.chdir(path):换个地方溜达

    import os
    
    os.chdir("/tmp")  # 切换到 /tmp 目录
    print(f"当前工作目录已切换至:{os.getcwd()}")

    就像你在命令行里用 cd 命令一样,os.chdir() 可以让你在不同的目录之间切换。

  • os.mkdir(path)os.makedirs(path):造房子,盖别墅

    import os
    
    os.mkdir("my_new_directory")  # 创建一个名为 my_new_directory 的目录
    os.makedirs("my_new_directory/subdir1/subdir2")  # 创建多层目录

    os.mkdir() 只能创建单层目录,如果目录已经存在就会报错。而 os.makedirs() 则可以创建多层目录,如果中间的目录不存在,它会自动创建。你可以把它想象成盖别墅,一层一层地往上盖。

  • os.rmdir(path)shutil.rmtree(path):拆房子,夷为平地

    import os
    import shutil
    
    os.rmdir("my_new_directory")  # 删除一个空目录
    shutil.rmtree("my_new_directory")  # 删除包含内容的目录

    os.rmdir() 只能删除空目录,如果目录里有文件或者其他目录,就会报错。shutil.rmtree() 则可以删除包含内容的目录,注意,这个操作不可逆,使用时要小心!

  • os.remove(path):抹去痕迹

    import os
    
    os.remove("my_file.txt")  # 删除一个文件

    这个函数用于删除文件,就像你在命令行里用 rm 命令一样。

  • os.rename(old_path, new_path):改头换面

    import os
    
    os.rename("old_file.txt", "new_file.txt")  # 重命名文件
    os.rename("old_directory", "new_directory")  # 重命名目录

    你可以用这个函数来重命名文件或者目录。

2. 文件属性:知己知彼,百战不殆

  • os.path.exists(path):它存在吗?

    import os
    
    if os.path.exists("my_file.txt"):
        print("文件存在")
    else:
        print("文件不存在")

    这个函数可以检查文件或者目录是否存在。

  • os.path.isfile(path)os.path.isdir(path):它是文件还是目录?

    import os
    
    if os.path.isfile("my_file.txt"):
        print("这是一个文件")
    elif os.path.isdir("my_directory"):
        print("这是一个目录")

    这两个函数可以判断给定的路径是文件还是目录。

  • os.path.getsize(path):它有多重?

    import os
    
    file_size = os.path.getsize("my_file.txt")
    print(f"文件大小是:{file_size} 字节")

    这个函数可以获取文件的大小,单位是字节。

  • os.path.getmtime(path):最后一次见它是什么时候?

    import os
    import time
    
    last_modified_time = os.path.getmtime("my_file.txt")
    print(f"最后修改时间是:{time.ctime(last_modified_time)}")

    这个函数可以获取文件的最后修改时间,返回的是一个时间戳,可以用 time.ctime() 函数转换成可读的格式。

3. 路径处理:迷宫探险的地图

  • os.path.abspath(path):告诉我你的绝对位置

    import os
    
    absolute_path = os.path.abspath("my_file.txt")
    print(f"绝对路径是:{absolute_path}")

    这个函数可以获取文件的绝对路径,也就是从根目录开始的完整路径。

  • os.path.dirname(path)os.path.basename(path):你的父母是谁?你的名字叫什么?

    import os
    
    path = "/path/to/my/file.txt"
    directory = os.path.dirname(path)
    filename = os.path.basename(path)
    
    print(f"目录是:{directory}")
    print(f"文件名是:{filename}")

    os.path.dirname() 可以获取文件所在的目录,os.path.basename() 可以获取文件名。

  • os.path.join(path1, path2, ...):把碎片拼起来

    import os
    
    path = os.path.join("/path/to", "my", "file.txt")
    print(f"拼接后的路径是:{path}")

    这个函数可以把多个路径片段拼接成一个完整的路径,它会自动处理路径分隔符,让你的代码在不同的操作系统上都能正常运行。

4. 系统信息:了解你的环境

  • os.environ:环境变量的宝藏

    import os
    
    username = os.environ.get("USERNAME")
    print(f"当前用户名是:{username}")

    os.environ 是一个字典,包含了所有的环境变量。你可以通过 os.environ.get() 方法来获取某个环境变量的值。

  • os.system(command):执行系统命令

    import os
    
    os.system("ls -l")  # 执行 ls -l 命令

    这个函数可以执行系统命令,就像你在命令行里输入命令一样。但是,使用 os.system() 要小心,因为它可能会执行一些危险的命令,导致系统崩溃。建议使用 subprocess 模块来执行系统命令,它更加安全和灵活。

第二幕:sys 模块 – 我是你的程序指挥官

sys 模块,可以理解为 "system" 的缩写,它提供了一些与 Python 解释器交互的函数和变量。你可以用它来获取命令行参数、控制程序的退出、甚至修改 Python 的搜索路径。

1. 命令行参数:程序的入口

  • sys.argv:接收来自世界的问候

    import sys
    
    print(f"命令行参数是:{sys.argv}")

    sys.argv 是一个列表,包含了所有的命令行参数。第一个元素是脚本的名称,后面的元素是用户输入的参数。

    例如,如果你在命令行里输入 python my_script.py arg1 arg2,那么 sys.argv 的值就是 ['my_script.py', 'arg1', 'arg2']

2. 程序控制:进退自如

  • sys.exit(status):优雅地谢幕

    import sys
    
    if some_error_occurred:
        print("程序出错,即将退出")
        sys.exit(1)  # 退出程序,返回状态码 1

    sys.exit() 可以让程序退出,你可以指定一个状态码,告诉操作系统程序是正常退出还是异常退出。

3. 模块搜索路径:寻找宝藏的地图

  • sys.path:告诉 Python 去哪里找模块

    import sys
    
    print(f"模块搜索路径是:{sys.path}")

    sys.path 是一个列表,包含了 Python 解释器搜索模块的路径。你可以修改 sys.path,让 Python 能够找到你自定义的模块。

    import sys
    
    sys.path.append("/path/to/my/module")  # 添加新的模块搜索路径

4. 标准输入输出:与世界交流

  • sys.stdinsys.stdoutsys.stderr:程序的眼睛、嘴巴和耳朵

    sys.stdin 是标准输入流,你可以用它来读取用户的输入。sys.stdout 是标准输出流,你可以用它来打印程序的输出。sys.stderr 是标准错误流,你可以用它来打印程序的错误信息。

    import sys
    
    # 从标准输入读取一行
    line = sys.stdin.readline().strip()
    print(f"你输入的是:{line}")
    
    # 向标准输出打印信息
    sys.stdout.write("这是一条输出信息n")
    
    # 向标准错误打印错误信息
    sys.stderr.write("这是一个错误信息n")

第三幕:shutil 模块 – 我是你的文件搬运工

shutil 模块,可以理解为 "shell utilities" 的缩写,它提供了一些高级的文件操作函数,比如复制文件、移动文件、压缩文件等。你可以把它想象成一个文件搬运工,帮你轻松处理各种文件操作。

1. 文件复制:克隆大法

  • shutil.copy(src, dst):复制文件

    import shutil
    
    shutil.copy("source_file.txt", "destination_file.txt")  # 复制文件

    这个函数可以复制文件,它会把 src 文件的内容复制到 dst 文件。如果 dst 文件已经存在,它会被覆盖。

  • shutil.copytree(src, dst):复制目录

    import shutil
    
    shutil.copytree("source_directory", "destination_directory")  # 复制目录

    这个函数可以复制整个目录,包括目录里的所有文件和子目录。如果 dst 目录已经存在,就会报错。

2. 文件移动:乾坤大挪移

  • shutil.move(src, dst):移动文件或目录

    import shutil
    
    shutil.move("source_file.txt", "destination_directory")  # 移动文件到目录
    shutil.move("source_directory", "destination_directory")  # 移动目录到目录

    这个函数可以移动文件或目录,它会把 src 文件或目录移动到 dst 目录。如果 dst 已经存在同名的文件或目录,它会被覆盖。

3. 文件压缩:打包带走

  • shutil.make_archive(base_name, format, root_dir):把东西打包成压缩包

    import shutil
    
    shutil.make_archive("my_archive", "zip", "/path/to/my/directory")  # 创建一个 zip 压缩包

    这个函数可以把一个目录压缩成一个压缩包。base_name 是压缩包的名字,format 是压缩格式,root_dir 是要压缩的目录。常用的压缩格式有 "zip"、"tar"、"gztar"、"bztar"、"xztar"。

4. 磁盘空间:家底有多少

  • shutil.disk_usage(path):看看还剩多少空间

    import shutil
    
    total, used, free = shutil.disk_usage("/")  # 获取根目录的磁盘使用情况
    print(f"总空间:{total // (2**30)} GB")
    print(f"已用空间:{used // (2**30)} GB")
    print(f"可用空间:{free // (2**30)} GB")

    这个函数可以获取磁盘的使用情况,包括总空间、已用空间和可用空间。

总结:系统级操作的利器

咱们今天一起学习了 ossysshutil 这三个强大的模块,它们就像 Python 的左膀右臂,让你能够轻松地进行系统级操作。

为了方便大家记忆,我给大家整理了一个表格:

模块 常用函数 功能描述
os os.getcwd() 获取当前工作目录
os.chdir(path) 改变当前工作目录
os.mkdir(path) / os.makedirs(path) 创建目录
os.rmdir(path) / shutil.rmtree(path) 删除目录
os.remove(path) 删除文件
os.rename(old_path, new_path) 重命名文件或目录
os.path.exists(path) 检查文件或目录是否存在
os.path.isfile(path) / os.path.isdir(path) 检查路径是文件还是目录
os.path.getsize(path) 获取文件大小
os.path.abspath(path) 获取绝对路径
sys sys.argv 获取命令行参数
sys.exit(status) 退出程序
sys.path 获取模块搜索路径
shutil shutil.copy(src, dst) 复制文件
shutil.copytree(src, dst) 复制目录
shutil.move(src, dst) 移动文件或目录
shutil.make_archive(base_name, format, root_dir) 创建压缩包
shutil.disk_usage(path) 获取磁盘使用情况

当然,这只是冰山一角,还有很多其他的函数等待你去探索。记住,熟能生巧,多练习,多实践,你才能真正掌握这些工具,成为一个系统级操作的高手!

最后,提醒大家,在使用这些模块进行系统级操作时,一定要小心谨慎,避免误操作导致数据丢失或者系统崩溃。切记,安全第一!

今天的讲座就到这里,谢谢大家!希望大家有所收获,下次再见!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注