专业编程基础技术教程

网站首页 > 基础教程 正文

Python的os模块:操作系统交互的得力助手

ccvgpt 2025-05-05 14:22:06 基础教程 11 ℃

对话实录

小白:(苦恼)我想用 Python 获取当前目录下的所有文件,还想创建新文件夹,该怎么办呢?

专家:(拿出魔法书)用Python的os模块,轻松与操作系统交互,实现文件和目录操作!os模块里还有很多细分功能,比如os.path模块,在路径处理上非常实用。

Python的os模块:操作系统交互的得力助手

os模块目录操作

函数

用法

说明

os.getcwd

os.getcwd()

获取当前工作目录

os.chdir

os.chdir(path)

更改工作目录

os.listdir

os.listdir(path)

列出目录内容

os.mkdir

os.mkdir(path)

创建单个目录

os.makedirs

os.makedirs(path)

创建多级目录

os.rename

os.rename(src, dst)

重命名文件或目录

os.stat

os.stat(path)

获取文件或目录状态

os.walk

os.walk(top)

递归遍历目录树

1. 获取当前工作目录

os模块的getcwd函数可以获取当前 Python 脚本所在的工作目录。

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

运行这段代码,你就能看到当前脚本所处的目录路径,就像给你在文件系统的 “地图” 上标亮了当前位置。

2. 更改工作目录

通过chdir函数,能切换到指定目录。比如要切换到/home/user/Documents目录:

import os
new_dir = "/home/user/Documents"
os.chdir(new_dir)
current_dir = os.getcwd()
print(f"现在的工作目录已变为: {current_dir}")

3.列出目录内容

listdir函数可列出指定目录下的所有文件和子目录,返回一个list。假设要列出当前目录下的内容:

import os
content = os.listdir(path='.')  #'.'表示当前目录
for item in content:
	print(item)

运行后,当前目录中的所有文件和文件夹名称都会一一列出,帮助你快速了解目录构成。

4.创建目录

使用mkdir函数创建单个目录(当文件夹存在时会报错),makedirs函数可创建多级目录。例如创建一个名为new_folder的文件夹:

import os
new_folder = "new_folder"
os.mkdir(new_folder)
print(f"{new_folder} 文件夹已创建")

若要创建多级目录,如
parent_folder/child_folder:

import os
multi_dir = "parent_folder/child_folder"
os.makedirs(multi_dir)
print(f"{multi_dir} 多级目录已创建")

轻松在文件系统中搭建新的目录结构。

5.文件重命名

rename函数能对文件或目录进行重命名。比如将old_file.txt重命名为new_file.txt:

import os
old_name = "old_file.txt"
new_name = "new_file.txt"
os.rename(old_name, new_name)
print(f"{old_name} 已重命名为 {new_name}")

就像在操作系统中右键选择重命名一样简单。

6.获取文件状态

stat函数可以获取文件或目录的详细信息,如文件大小、修改时间等。以获取example.txt文件的信息为例:

import os
file_info = os.stat('example.txt')
#os.stat返回结果:
os.stat_result(st_mode=16832, st_ino=245263, st_dev=16777234, 
               st_nlink=15, st_uid=501, st_gid=20, st_size=480,
               st_atime=1713104547, 
               st_mtime=1713104547, st_ctime=1713104547)
print(f"文件大小: {file_info.st_size} 字节")
print(f"最后修改时间: {file_info.st_mtime}")

7.修改文件权限

在 Linux 和 macOS 系统中,可以使用chmod函数修改文件或目录的权限。比如将example.txt文件的权限设置为所有者可读可写可执行,组用户和其他用户只读:

import os
os.chmod('example.txt', 0o744)

这里0o744是八进制表示的权限,对应rwx-r-r。通过修改权限,可灵活控制文件的访问级别。

8.删除文件

remove函数用于删除指定文件。例如删除unwanted_file.txt文件:

import os
os.remove('unwanted_file.txt')
print('unwanted_file.txt已删除')

执行后,该文件会从文件系统中移除。不过要谨慎操作,因为删除后文件难以恢复。

9.删除目录

rmdir函数可删除空目录,而对于非空目录,需要使用shutil.rmtree函数(shutil模块是对os模块文件操作的补充)。例如删除名为empty_folder的空目录:

import os
os.rmdir('empty_folder')
print('empty_folder已删除')

removedirs函数可以递归删除多层空目录,以下执行会依次删除dir3/dir2/dir1目录,但是某个目录如果不为空,则会报错。

os.removedirs('/Users/Desktop/dir1/dir2/dir3')

若要删除包含文件和子目录的non_empty_folder目录:

import shutil
shutil.rmtree('non_empty_folder')
print('non_empty_folder已删除')

使用shutil.rmtree时要格外小心,因为它会递归删除目录及其所有内容。

10.查找文件

有时候需要在指定目录及其子目录中查找特定文件。虽然os模块本身没有直接的查找函数,但结合os.walk可以实现。比如查找/home/user目录下所有的.txt文件:

import os
for root, dirs, files in os.walk('/home/user'):
  for file in files:
    if file.endswith('.txt'):
      print(os.path.join(root, file))

通过这种方式,能快速定位到符合条件的文件,在处理大量文件时非常实用。

os.path路径操作

1.路径拼接

os.path.join函数在路径拼接上极为实用,能避免因操作系统不同导致的路径分隔符问题。例如,要拼接/home/user和Documents/file.txt:

import os
base_path = "/home/user"
sub_path = "Documents/file.txt"
full_path = os.path.join(base_path, sub_path)
print(f"拼接后的路径: {full_path}")
# 在Linux和macOS上输出: /home/user/Documents/file.txt
# 在Windows上输出: C:\home\user\Documents\file.txt(假设C:为当前盘)

无论在何种操作系统下,都能正确拼接路径,确保代码的跨平台性。

2.获取文件名和目录名

os.path.basename函数用于获取路径中的文件名部分,os.path.dirname函数用于获取路径中的目录名部分。例如:

import os
file_path = "/home/user/Documents/file.txt"
file_name = os.path.basename(file_path)
dir_name = os.path.dirname(file_path)
print(f"文件名: {file_name}") # 输出: file.txt
print(f"目录名: {dir_name}") # 输出: /home/user/Documents

在处理文件路径时,这两个函数能帮助你快速提取关键信息。

3.检查路径类型

os.path.isfile函数可判断路径是否指向一个文件,os.path.isdir函数可判断路径是否指向一个目录。比如:

import os
file_path = "/home/user/Documents/file.txt"
dir_path = "/home/user/Documents"
print(os.path.isfile(file_path)) # 输出: True(假设文件存在)
print(os.path.isdir(dir_path)) # 输出: True(假设目录存在)

在进行文件或目录操作前,通过这些函数检查路径类型,可避免因路径类型错误导致的操作失败。

4.获取文件的绝对路径

os.path.abspath函数可以将相对路径转换为绝对路径。例如:

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

这在处理不同目录下的文件,需要明确文件的完整路径时非常有用。

5.判断文件是否存在

os.path.exists函数除了在前面提到的避免操作不存在文件的场景外,还可用于判断文件或目录是否存在。比如:

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

在编写程序时,提前检查文件或目录的存在性,能增强程序的稳定性。

6.分割目录和文件名

os.path.split(path)将路径分割为目录和文件名(返回一个元组tuple)

print(os.path.split('dir1/dir2/1.txt'))
#输出为('dir1/dir2', '1.txt')

7.返回文件的大小

os.path.getsize(path)返回指定文件的大小(以字节byte为单位)。

print(os.path.getsize('/dir1/dir2/1.txt'))
#输出为81字节

8.路径分隔符

os.path.sep表示路径分隔符路径分割符,windows和mac上是‘/’

print(os.path.sep)
#输出为/

9.获取操作系统名称

os.name可以获取当前运行的操作系统名称。例如:

import os
os_name = os.name
if os_name == 'posix':
  print("当前操作系统是类Unix系统(Linux、macOS等)")
elif os_name == 'nt':
  print("当前操作系统是Windows")

根据不同的操作系统名称,你可以编写具有差异化功能的代码,提升程序的适用性。

闭坑指南

路径分隔符问题

不同操作系统的路径分隔符不同,Windows 使用反斜杠\,而 Linux 和 macOS 使用正斜杠/。在编写跨平台代码时,直接写死路径分隔符会导致错误。例如在 Windows 下:

# 错误示范,在Linux或macOS上会出错
file_path = "C:\Program Files\example.txt"
# 正确做法,使用os.path.join函数
import os
file_path = os.path.join('C:', 'Program Files', 'example.txt')

os.path.join函数会根据操作系统自动选择正确的路径分隔符,保证代码的跨平台性。

权限不足错误

在进行文件或目录操作时,如果权限不足会报错。比如在 Linux 系统中,尝试在/root目录下创建文件(普通用户无权限):

import os
# 错误示范,普通用户无权限在/root下创建文件
os.mkdir('/root/new_folder')

运行会提示权限不足错误。务必确保当前运行 Python 脚本的用户有足够权限执行相应操作。

操作不存在的文件或目录

对不存在的文件或目录进行操作(如删除、重命名)会引发错误。例如删除一个不存在的文件:

import os
# 错误示范,文件不存在会报错
os.remove('non_existent_file.txt')

在进行操作前,最好先用os.path.exists函数检查目标是否存在。

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

环境变量操作

os.environ可用于获取和操作环境变量。比如获取系统的PATH环境变量:

import os
path_env = os.environ.get('PATH')
print(f"PATH环境变量: {path_env}")

也可以临时设置环境变量:

import os
os.environ['TEMP_VARIABLE'] = 'example_value'
value = os.environ.get('TEMP_VARIABLE')
print(f"临时环境变量值: {value}")

在某些需要特定环境变量的程序调用中很有用。

执行系统命令

os.system函数能在 Python 中执行系统命令。例如在 Windows 下打开计算器程序:

import os
os.system('calc')

在 Linux 下更新软件包列表:

import os
os.system('sudo apt update')

不过要注意,os.system在处理复杂命令和获取命令输出时存在一定局限性,更推荐使用subprocess模块进行更强大的命令执行和输出处理。

小白:(恍然大悟)原来os模块有这么多实用功能,能让我轻松操控操作系统!

专家:(微笑)记住:掌握os模块,你在 Python 中与操作系统交互将更加得心应手!

常用函数速查表

函数

用法

说明

os.getcwd

os.getcwd()

获取当前工作目录

os.chdir

os.chdir(path)

更改工作目录

os.listdir

os.listdir(path)

列出目录内容

os.mkdir

os.mkdir(path)

创建单个目录

os.makedirs

os.makedirs(path)

创建多级目录

os.rename

os.rename(src, dst)

重命名文件或目录

os.stat

os.stat(path)

获取文件或目录状态

os.walk

os.walk(top)

递归遍历目录树

os.environ

os.environ.get('VAR_NAME')

获取环境变量

os.system

os.system(command)

执行系统命令

os.chmod

os.chmod(path, mode)

修改文件或目录权限

os.remove

os.remove(path)

删除文件

os.rmdir

os.rmdir(path)

删除空目录

os.path.join

os.path.join(path1, path2)

拼接路径

os.path.basename

os.path.basename(path)

获取文件名

os.path.dirname

os.path.dirname(path)

获取目录名

os.path.isfile

os.path.isfile(path)

判断是否为文件

os.path.isdir

os.path.isdir(path)

判断是否为目录

os.path.abspath

os.path.abspath(path)

获取绝对路径

os.path.exists

os.path.exists(path)

判断路径是否存在

os.name

os.name

获取操作系统名称

Tags:

最近发表
标签列表