Appearance
文件夹和文件操作
在编写 Python 程序时,操作文件和目录是常见的任务之一。理解和使用相对路径和绝对路径是操作文件和目录的基础。
相对路径与绝对路径
- 绝对路径(Absolute Path)
绝对路径是从根目录开始的完整路径,指定了文件或目录在文件系统中的唯一位置。
示例: 在 Windows 上,绝对路径可能是:
C:\Users\Username\Documents\example.txt
在 Unix/Linux 或 macOS 上,绝对路径可能是:
/home/username/Documents/example.txt
Python 代码示例:
python
import os
absolute_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹1"
# 检查路径是否存在。在操作文件或目录之前,检查路径是否存在是个好习惯
if os.path.exists(absolute_path):
print('绝对路径存在')
- 相对路径(Relative Path)
相对路径是相对于当前工作目录(Current Working Directory, CWD)的路径。相对路径简洁,通常用于访问程序所在目录的文件。
获取当前工作目录:
python
import os
current_directory = os.getcwd()
print("当前工作目录是:", current_directory)
以下是相对路径:
新建文件夹1
Python 代码示例:
python
import os
relative_path = "新建文件夹1"
if os.path.exists(relative_path):
print('相对路径存在')
- 设置当前工作目录:
python
import os
os.chdir("C:\\")
print("当前工作目录已更改为:", os.getcwd())
- 生成绝对路径
有时候我们需要将相对路径转换为绝对路径,可以使用 os.path 模块中的 abspath() 方法。
python
relative_path = "新建文件夹1"
absolute_path = os.path.abspath(relative_path)
print("绝对路径是:", absolute_path)
创建目录
python
import os
os.makedirs("C:\\Users\\Administrator\\Desktop\\新建文件夹1\\新建文件夹2\\新建文件夹3", exist_ok=True)
print("目录已创建。")
exist_ok 参数:exist_ok=False(默认值): 如果目标目录已经存在,os.makedirs() 会引发 FileExistsError 异常。exist_ok=True: 如果目标目录已经存在,则不会引发异常。os.makedirs() 会正常执行而不进行任何操作,因为目标目录已存在。
删除目录
在 Python 中删除文件夹有几种不同的方法,取决于文件夹是否为空和你使用的 Python 版本。以下是常见的删除文件夹的方式:
- 使用 os.rmdir() 删除空文件夹
os.rmdir() 只能删除空文件夹。如果文件夹不为空,会引发 OSError。
示例:
python
import os
folder_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹1\\新建文件夹2\\新建文件夹3"
try:
os.rmdir(folder_path)
print("空文件夹已删除。")
except OSError as e:
print(f"删除失败:{e}")
- 使用 os.removedirs() 删除嵌套空文件夹
os.removedirs() 用于递归删除空文件夹,但它只能在删除的每个文件夹都为空时成功。
python
import os
nested_folder_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹1\\新建文件夹2"
try:
os.removedirs(nested_folder_path)
print("嵌套的空文件夹已删除。")
except OSError as e:
print(f"删除失败:{e}")
- 使用 shutil.rmtree() 删除非空文件夹
shutil.rmtree() 用于删除非空文件夹及其内容,包括所有子目录和文件。它是删除目录的更常用方法。
示例:
python
import shutil
folder_path = "C:\\Users\\Administrator\\Desktop\\新建文件夹4\\新建文件夹5"
# 删除文件夹时,可能会遇到权限错误、文件夹不存在等问题。使用异常处理来处理这些情况:
try:
shutil.rmtree(folder_path)
print("文件夹及其内容已删除。")
except FileNotFoundError as e:
print(f"删除失败:{e}")
except PermissionError as e:
print(f"权限错误:{e}")
except Exception as e:
print(f"发生错误:{e}")
删除文件
python
import os
file_path = "C:\\Users\\Administrator\\\Desktop\\1.txt"
if os.path.exists(file_path):
os.remove(file_path)
print("文件已删除。")
遍历目录
- 遍历目录中的所有文件和子目录。不递归,仅列出当前目录的内容。
python
import os
directory_contents = os.listdir("C:\\Users\\Administrator\\\Desktop")
print("目录内容:", directory_contents)
- 递归遍历目录中的所有文件和子目录。
python
import os
# 设置要遍历的根目录路径
root_dir = 'C:\\Users\\Administrator\\\Desktop'
# os.walk()是Python中的一个函数,用于遍历一个目录及其所有子目录,返回一个生成器。这个生成器会产生一个三元组(root, dirs, files),其中root表示当前正在遍历的目录,dirs表示该目录下的所有子目录名,files表示该目录下的所有文件名。
for root, dirs, files in os.walk(root_dir):
print(f"当前目录:{root}")
# 打印所有子目录
if dirs:
print("子目录:")
for dir_name in dirs:
print(f" {dir_name}")
else:
print("没有子目录。")
# 打印所有文件
if files:
print("文件:")
for file_name in files:
print(f" {file_name}")
else:
print("没有文件。")
print() # 输出空行分隔不同目录