os
模块中文件和路径操作方法的综合整理
1. 路径相关的方法
os.path.exists(path)
- 说明: 判断指定路径是否存在。返回
True
如果路径存在,否则返回False
。 - 示例:
import os path = "/path/to/file" if os.path.exists(path): print("Path exists.")
os.path.isabs(path)
- 说明: 判断指定路径是否为绝对路径。
- 示例:
path = "/usr/bin/python" print(os.path.isabs(path)) # True
os.path.isfile(path)
- 说明: 判断指定路径是否为文件。
- 示例:
path = "/path/to/file" print(os.path.isfile(path)) # True or False
os.path.isdir(path)
- 说明: 判断指定路径是否为目录。
- 示例:
path = "/path/to/directory" print(os.path.isdir(path)) # True or False
os.path.join(*paths)
- 说明: 将多个路径组合成一个路径,使用适当的路径分隔符。
- 示例:
base_path = "/home/user" file_name = "document.txt" full_path = os.path.join(base_path, file_name) print(full_path) # /home/user/document.txt
os.path.basename(path)
- 说明: 返回路径的最后一部分(文件名或目录名)。
- 示例:
path = "/home/user/document.txt" print(os.path.basename(path)) # document.txt
os.path.dirname(path)
- 说明: 返回路径中的目录部分。
- 示例:
path = "/home/user/document.txt" print(os.path.dirname(path)) # /home/user
os.path.split(path)
- 说明: 将路径拆分为目录和文件名两部分,返回
(dirname, basename)
。 - 示例:
path = "/home/user/document.txt" print(os.path.split(path)) # ('/home/user', 'document.txt')
os.path.splitext(path)
- 说明: 分离文件名和扩展名,返回
(filename, extension)
。 - 示例:
path = "/home/user/document.txt" print(os.path.splitext(path)) # ('/home/user/document', '.txt')
os.path.abspath(path)
- 说明: 返回路径的绝对路径。
- 示例:
path = "document.txt" print(os.path.abspath(path)) # /current/directory/document.txt
os.path.realpath(path)
- 说明: 返回路径的真实路径,解决符号链接。
- 示例:
path = "/usr/bin/python" print(os.path.realpath(path)) # /usr/local/bin/python (if symlink)
os.path.normpath(path)
- 说明: 规范化路径,去掉多余的分隔符和上级目录引用。
- 示例:
path = "/home//user/../user2/./document.txt" print(os.path.normpath(path)) # /home/user2/document.txt
os.path.expanduser(path)
- 说明: 将
~
展开为用户主目录。 - 示例:
path = "~/document.txt" print(os.path.expanduser(path)) # /home/username/document.txt
os.path.expandvars(path)
- 说明: 扩展路径中的环境变量。
- 示例:
path = "$HOME/document.txt" print(os.path.expandvars(path)) # /home/username/document.txt
2. 文件和目录操作的方法
os.listdir(path)
- 说明: 返回指定目录下的所有文件和子目录列表。
- 示例:
path = "/path/to/directory" files_and_dirs = os.listdir(path) print(files_and_dirs) # ['file1.txt', 'file2.txt', 'subdir1', ...]
os.mkdir(path, mode=0o777)
- 说明: 创建一个新目录,可以指定权限。
- 示例:
path = "/path/to/new_directory" os.mkdir(path)
os.makedirs(name, mode=0o777, exist_ok=False)
- 说明: 递归创建目录路径。如果路径已存在且
exist_ok=True
,则不会报错。 - 示例:
path = "/path/to/multiple/directories" os.makedirs(path, exist_ok=True)
os.rmdir(path)
- 说明: 删除一个空目录。
- 示例:
path = "/path/to/directory" os.rmdir(path)
os.remove(path)
- 说明: 删除指定路径的文件或符号链接。
- 示例:
path = "/path/to/file.txt" os.remove(path)
os.rename(src, dst)
- 说明: 重命名文件或目录。
- 示例:
src = "/path/to/old_name.txt" dst = "/path/to/new_name.txt" os.rename(src, dst)
os.replace(src, dst)
- 说明: 安全地重命名文件或目录,即使目标已存在。
- 示例:
src = "/path/to/old_name.txt" dst = "/path/to/new_name.txt" os.replace(src, dst)
os.chdir(path)
- 说明: 改变当前工作目录。
- 示例:
path = "/path/to/directory" os.chdir(path) print(os.getcwd()) # 验证当前目录
os.getcwd()
- 说明: 返回当前工作目录路径。
- 示例:
current_directory = os.getcwd() print(current_directory)
os.symlink(src, dst)
- 说明: 创建符号链接。
- 示例:
src = "/path/to/original/file.txt" dst = "/path/to/symlink/file.txt" os.symlink(src, dst)
os.stat(path)
- 说明: 获取指定路径的文件或目录状态信息。
- 示例:
path = "/path/to/file.txt" file_stat = os.stat(path) print(file_stat) # 查看文件大小、修改时间等信息
os.walk(top, topdown=True, onerror=None, followlinks=False)
- 说明: 生成目录树下的文件名,递归遍历目录。
- 示例:
for dirpath, dirnames, filenames in os.walk("/path/to/directory"): print(f"Directory: {dirpath}") print(f"Subdirectories: {dirnames}") print(f"Files: {filenames}")
3. 综合示例
以下示例演示了如何使用上述方法来操作文件和目录:
import os
# 设置路径
base_dir = os.path.expanduser("~/my_project")
data_dir = os.path.join(base_dir, "data")
file_path = os.path.join(data_dir, "data.txt")
# 创建目录
os.makedirs(data_dir, exist_ok=True)
# 检查文件是否存在,如果不存在则创建
if not os.path.exists(file_path):
with open(file_path, 'w') as f:
f.write("Sample data")
# 获取文件信息
file_stat = os.stat(file_path)
print(f"File Size: {file_stat.st_size} bytes")
# 列出目录中的文件
files = os.listdir(data_dir)
print("Files in data directory:", files)
# 遍历目录树
for dirpath, dirnames, filenames in os.walk(base_dir):
print(f"Found directory: {dirpath}")
for filename in filenames:
print(f" - {filename}")