杰瑞科技汇

python windows 目录

我们将主要使用 Python 内置的 os 模块和更现代、更推荐的 pathlib 模块。


获取当前工作目录

当前工作目录是 Python 脚本当前正在操作的默认目录。

使用 os 模块

os.getcwd() 函数可以获取当前工作目录的字符串。

import os
# 获取当前工作目录
current_dir = os.getcwd()
print(f"当前工作目录是: {current_dir}")
# 输出示例: C:\Users\YourUser\Documents\PythonProject

列出目录内容

如果你想查看一个目录下有哪些文件和子目录。

使用 os 模块

  • os.listdir(path): 返回一个包含 path 指定目录下所有文件和文件夹名称的列表。
import os
# 列出当前目录下的内容
contents = os.listdir('.')
print(f"当前目录下的内容: {contents}")
# 列出特定目录下的内容
# 列出 C:\Windows 目录下的内容
# windows_contents = os.listdir('C:\\Windows') # 注意 Windows 路径的转义
# print(f"C:\\Windows 目录下的内容: {windows_contents}")

重要提示:路径分隔符 在 Windows 中,路径分隔符是反斜杠 \,但在 Python 字符串中,\ 是一个转义字符(\n 代表换行),为了避免混淆,有几种常见的写法:

  1. 使用双反斜杠: 'C:\\Users\\YourUser'
  2. 使用原始字符串 (推荐): 在字符串前加 r,告诉 Python 忽略所有转义字符。r'C:\Users\YourUser'
  3. 使用正斜杠: Python 通常也能正确处理正斜杠,'C:/Users/YourUser'

创建和删除目录

使用 os 模块

  • os.mkdir(path): 创建一个单层目录,如果父目录不存在,会抛出 FileNotFoundError
  • os.makedirs(path): 创建多层目录(包括所有必需的父目录),如果目录已存在,会抛出 FileExistsError,可以通过 exist_ok=True 参数来避免此错误。
  • os.rmdir(path): 删除一个目录,如果目录非空,会抛出 OSError
  • os.removedirs(path): 递归删除目录,如果目录为空,一旦遇到一个非空目录,就会停止。
import os
# 创建一个单层目录 'new_folder'
try:
    os.mkdir('new_folder')
    print("目录 'new_folder' 创建成功")
except FileExistsError:
    print("目录 'new_folder' 已存在")
except OSError as e:
    print(f"创建目录失败: {e}")
# 创建一个多层目录 'parent/child/grandchild'
try:
    os.makedirs('parent/child/grandchild', exist_ok=True)
    print("多层目录 'parent/child/grandchild' 创建成功")
except OSError as e:
    print(f"创建多层目录失败: {e}")
# 删除一个空目录 'new_folder'
try:
    if os.path.exists('new_folder'):
        os.rmdir('new_folder')
        print("目录 'new_folder' 删除成功")
except OSError as e:
    print(f"删除目录失败: {e}")

路径拼接和检查

手动拼接路径字符串(如 folder + '\\' + filename)容易出错,尤其是在不同操作系统上,Python 提供了更好的方法。

使用 os 模块

  • os.path.join(path1, path2, ...): 强烈推荐,智能地使用当前操作系统的正确路径分隔符来拼接路径。
  • os.path.exists(path): 检查路径是否存在(文件或目录)。
  • os.path.isdir(path): 检查路径是否是一个目录。
  • os.path.isfile(path): 检查路径是否是一个文件。
import os
# 使用 os.path.join 拼接路径
# 这样写是跨平台的,代码更健壮
file_path = os.path.join('parent', 'child', 'data.txt')
print(f"拼接后的路径: {file_path}")
# 检查路径是否存在
if os.path.exists(file_path):
    print(f"路径 '{file_path}' 存在")
else:
    print(f"路径 '{file_path}' 不存在")
# 检查是否是目录
if os.path.isdir('parent'):
    print("'parent' 是一个目录")

更现代的方式:pathlib 模块 (Python 3.4+)

pathlib 是面向对象的路径操作库,语法更简洁、更直观,是目前推荐的做法,它将路径表示为 Path 对象,而不是简单的字符串。

核心概念:Path 对象

你需要从 pathlib 导入 Path

from pathlib import Path

常用操作

  1. 创建 Path 对象

    # 创建一个 Path 对象
    current_dir = Path('.')
    print(f"当前工作目录: {current_dir}")
    # 输出示例: . (在脚本所在目录下运行时)
  2. 获取绝对路径

    # 获取绝对路径
    abs_path = current_dir.resolve()
    print(f"绝对路径: {abs_path}")
  3. 列出目录内容

    # 列出目录内容 (返回一个生成器,包含 Path 对象)
    # .iterdir() 是迭代器,更节省内存
    print("\n列出当前目录内容:")
    for item in Path('.').iterdir():
        print(item)
  4. 拼接路径 (使用 运算符)

    # 使用 / 运算符拼接路径,非常直观!
    data_file = Path('parent') / 'child' / 'data.txt'
    print(f"\n拼接后的路径: {data_file}")
  5. 检查路径属性

    # 检查路径是否存在
    print(f"\n路径 '{data_file}' 是否存在: {data_file.exists()}")
    # 检查是否是目录
    print(f"'parent' 是否是目录: {Path('parent').is_dir()}")
    # 检查是否是文件
    print(f"'data.txt' 是否是文件: {Path('data.txt').is_file()}")
  6. 创建和删除目录

    # 创建目录 (makedirs 对应 pathlib 的 mkdir)
    # parents=True 表示创建所有父目录
    # exist_ok=True 表示如果目录已存在,不报错
    new_dir = Path('project/src')
    new_dir.mkdir(parents=True, exist_ok=True)
    print(f"\n目录 '{new_dir}' 创建成功")
    # 删除目录 (rmdir 对应 pathlib 的 rmdir)
    # 注意:rmdir 只能删除空目录
    if new_dir.exists():
        # 要删除非空目录及其内容,需要先递归删除内容
        # for item in new_dir.glob('**/*'): # 递归查找所有文件和目录
        #     item.unlink() # 删除文件
        #     if item.is_dir():
        #         item.rmdir() # 删除空目录
        # new_dir.rmdir() # 最后删除顶层空目录
        print(f"准备删除目录 '{new_dir}' 及其内容...")
        # 注意:直接删除非空目录需要 shutil.rmtree
        import shutil
        shutil.rmtree(new_dir)
        print(f"目录 '{new_dir}' 已删除")

os vs pathlib
功能 os 模块 (过程式) pathlib 模块 (面向对象) 推荐度
获取当前目录 os.getcwd() Path.cwd() pathlib 更简洁
路径拼接 os.path.join() Path / PathPath / str pathlib 运算符更直观
os.listdir() Path.iterdir() pathlib 返回对象,更易用
检查路径 os.path.exists(), isdir(), isfile() Path.exists(), is_dir(), is_file() pathlib 语法更统一
创建目录 os.mkdir(), os.makedirs() Path.mkdir(parents=True, exist_ok=True) pathlib 参数更清晰
删除目录 os.rmdir() (仅空) Path.rmdir() (仅空) pathlib 更一致
删除非空目录 shutil.rmtree() shutil.rmtree() (需导入 shutil) 两者都需要 shutil

对于新的 Python 项目,强烈推荐使用 pathlib,它的 API 设计更现代、更安全,代码可读性更高,能减少很多路径拼接相关的错误。os 模块依然非常有用,尤其是在需要与旧代码交互或进行一些底层的、非路径相关的操作系统操作时。

分享:
扫描分享到社交APP
上一篇
下一篇