20 天学 Python 文件操作:Day 7 文件路径与目录操作
在文件操作中,路径和目录是不可避免的重要部分。掌握路径的处理和目录操作可以大大提高文件管理效率。今天,我们将学习如何使用 Python 操作文件路径和目录。
1. 什么是文件路径?
文件路径是操作系统定位文件的方式,可以是绝对路径或相对路径。
- 绝对路径:从根目录开始的完整路径。例如:/home/user/documents/example.txt。
- 相对路径:相对于当前工作目录的路径。例如:documents/example.txt。
Python 的 os 模块和 pathlib 模块提供了强大的路径处理功能。
2. 使用 os 模块操作路径
os 模块中与路径相关的常用函数:
检查路径是否存在
import os
path = "example.txt"
if os.path.exists(path):
print(f"路径 '{path}' 存在!")
else:
print(f"路径 '{path}' 不存在!")
判断是文件还是目录
if os.path.isfile(path):
print(f"'{path}' 是一个文件。")
elif os.path.isdir(path):
print(f"'{path}' 是一个目录。")
else:
print(f"'{path}' 既不是文件也不是目录。")
拼接路径
base_dir = "/home/user"
sub_dir = "documents"
file_name = "example.txt"
full_path = os.path.join(base_dir, sub_dir, file_name)
print(f"完整路径为: {full_path}")
获取文件的目录名和文件名
file_path = "/home/user/documents/example.txt"
print(os.path.dirname(file_path)) # 输出:/home/user/documents
print(os.path.basename(file_path)) # 输出:example.txt
3. 使用 pathlib 模块操作路径
pathlib 是更现代、更易用的路径操作库。
创建 Path 对象
from pathlib import Path
file_path = Path("/home/user/documents/example.txt")
print(file_path)
检查路径是否存在
if file_path.exists():
print("路径存在!")
else:
print("路径不存在!")
获取文件名和父目录
print(file_path.name) # 输出:example.txt
print(file_path.parent) # 输出:/home/user/documents
拼接路径
new_path = file_path.parent / "new_file.txt"
print(new_path) # 输出:/home/user/documents/new_file.txt
4. 操作目录
目录操作是文件管理的基础功能。
创建目录
os.makedirs("new_folder/sub_folder", exist_ok=True)
print("目录已创建!")
删除目录
os.rmdir("new_folder/sub_folder")
print("目录已删除!")
注意:os.rmdir 只能删除空目录。
列出目录内容
for item in os.listdir("."):
print(item)
使用 pathlib 操作目录
from pathlib import Path
dir_path = Path("new_folder")
dir_path.mkdir(parents=True, exist_ok=True) # 创建目录
print(list(dir_path.iterdir())) # 列出目录内容
5. 示例:清理指定目录中的文件
以下示例代码演示了如何清理一个目录中的所有 .txt 文件。
import os
def clean_txt_files(directory):
try:
for file_name in os.listdir(directory):
file_path = os.path.join(directory, file_name)
if os.path.isfile(file_path) and file_name.endswith('.txt'):
os.remove(file_path)
print(f"已删除文件: {file_path}")
except Exception as e:
print(f"清理失败: {e}")
# 测试函数
clean_txt_files("example_folder")
6. 练习任务
- 编写一个函数 list_files_by_extension(directory, extension),列出指定目录中所有特定后缀的文件。
- 编写一个函数 move_files_to_directory(source_dir, target_dir),将一个目录中的所有文件移动到另一个目录。
示例代码框架:
def list_files_by_extension(directory, extension):
for file_name in os.listdir(directory):
if file_name.endswith(extension):
print(file_name)
def move_files_to_directory(source_dir, target_dir):
os.makedirs(target_dir, exist_ok=True)
for file_name in os.listdir(source_dir):
full_file_path = os.path.join(source_dir, file_name)
if os.path.isfile(full_file_path):
os.rename(full_file_path, os.path.join(target_dir, file_name))
print(f"已移动: {file_name}")
通过完成这些任务,你将对路径和目录操作有更深入的理解。下一篇我们将学习如何操作压缩文件,敬请期待!