一、操作文件路径
Python 的 os 库为我们提供了丰富的操作文件路径的功能,无需额外安装,导入即可使用(可通过 dir(os)
查看其众多方法 )。
1、获取当前路径
os 库中的 getcwd()
函数,作用是获取当前代码所在文件夹的绝对路径(不包含代码文件名本身) 。
示例代码:
import os
print(os.getcwd())
代码解析:第 1 行导入 os 库,第 2 行调用 os.getcwd()
函数,就能打印出当前代码所在文件夹的绝对路径,比如执行后可能输出 E:\书代码\第9章
这样的结果 。
2、创建文件夹
os 库提供两种创建文件夹的函数,满足不同场景需求:
1、mkdir () 函数
os.mkdir(路径)
函数可在指定路径中创建一个新的文件夹,但要求上级路径必须存在 。
示例代码:
import os
os.mkdir('E:\书代码\第9章\数据1')
代码解析:这行代码会在 E:\书代码\第9章 这个已存在的路径下,创建名为 “数据 1” 的新文件夹。若上级路径(如把路径改成 E:\书代码1\数据1 ,但 “书代码 1” 不存在)错误,执行会报错 FileNotFoundError ,提示系统找不到指定路径 。
2、makedirs () 函数
os.makedirs(路径) 函数更强大,能递归创建文件夹 ,也就是根据参数自动创建路径中包含的全部文件夹(即便上级路径不存在也没关系 )。
示例代码:
import os
os.makedirs(r'E:\书代码1\数据1\内容b')
代码解析:假设原本 E 盘没有 “书代码 1” 文件夹,执行代码后,会依次创建 “书代码 1”“数据 1”“内容 b” 这三个文件夹,自动补全整个路径 。
3、拼接路径
使用 os.path.join() 方法,能把多个参数拼接成规范的目录路径 ,无需操心路径分隔符(不同系统分隔符有差异,该方法会自动适配 ),方便快速获取文件地址。
示例代码:
import os
dir_new = os.path.join(os.getcwd(), '数据2', '内容c')
print(dir_new, type(dir_new))
代码解析:os.getcwd() 获取当前代码所在文件夹路径,os.path.join() 把该路径、“数据 2”“内容 c” 拼接成完整路径(如 E:\书代码\第9章\数据2\内容c ),最后打印路径及它的类型(字符串类型 )。
4、跳转路径
若要在程序里从当前代码所在文件夹路径,跳转到其他已存在的路径,可使用 os.chdir(路径) 函数。
示例代码:
import os
print(os.getcwd()) # 输出当前工作路径
os.chdir('E:\书代码\第9章\数据1') # 跳转到指定路径
print(os.getcwd()) # 输出跳转后的工作路径
代码解析:先打印当前路径,执行 os.chdir() 后,当前工作路径就变为指定的 E:\书代码\第9章\数据1 ,后续操作文件等就基于新路径,方便用相对路径处理文件 。
5、判断相对路径和绝对路径
借助 os.path.isabs(路径) 方法,能判断给定路径是相对路径(返回 False )还是绝对路径(返回 True )。
示例代码:
import os
a = os.path.isabs('数据2\内容c')
b = os.path.isabs('E:\书代码')
print(a, b)
代码解析:第 2 行判断 “数据 2\ 内容 c”(相对路径形式 ),返回 False ;第 3 行判断 “E:\ 书代码”(绝对路径 ),返回 True ,以此区分两种路径类型 。
6、获取文件路径和文件名
os 库 path 模块的几个方法,可灵活提取路径信息:
- basename(路径) :获取路径中的文件名 ;
- dirname(路径) :获取路径中的文件夹路径 ;
- split(路径) :把获取的文件夹路径和文件名以元组形式 返回 。
import os
path = r'E:\书代码\数据2\内容c\Python程序代码1.txt'
file_name = os.path.basename(path)
dir_name = os.path.dirname(path)
file_dir_name = os.path.split(path)
print(file_name, '\n', dir_name, '\n', file_dir_name)
代码解析:第 3 行获取文件名(如 Python程序代码1.txt );第 4 行获取文件夹路径(如 E:\书代码\数据2\内容c );第 5 行以元组形式返回文件夹路径和文件名(如 ('E:\书代码\数据2\内容c', 'Python程序代码1.txt') ),方便按需提取路径各部分信息 。
下面展示一个总和性代码
import os
def path_operations_demo():
print("===== 1. 获取当前工作路径 =====")
current_path = os.getcwd()
print(f"当前工作路径: {current_path}\n")
print("===== 2. 创建文件夹 =====")
# 使用mkdir创建单级文件夹(上级路径必须存在)
try:
os.mkdir("data_single")
print("已创建单级文件夹: data_single")
except FileExistsError:
print("单级文件夹已存在: data_single")
except Exception as e:
print(f"创建单级文件夹失败: {e}")
# 使用makedirs创建多级文件夹(自动创建不存在的上级路径)
multi_level_path = os.path.join("data_multi", "level1", "level2")
try:
os.makedirs(multi_level_path)
print(f"已创建多级文件夹: {multi_level_path}")
except FileExistsError:
print(f"多级文件夹已存在: {multi_level_path}")
except Exception as e:
print(f"创建多级文件夹失败: {e}")
print()
print("===== 3. 路径拼接 =====")
# 使用os.path.join拼接路径(自动适配系统分隔符)
joined_path = os.path.join(current_path, "data_joined", "subfolder")
print(f"拼接后的路径: {joined_path}")
print(f"路径类型: {type(joined_path)}\n")
print("===== 4. 跳转工作路径 =====")
# 保存原始路径用于后续恢复
original_path = os.getcwd()
print(f"跳转前路径: {original_path}")
# 跳转到新路径
try:
os.chdir("data_single")
print(f"跳转后路径: {os.getcwd()}")
except FileNotFoundError:
print("跳转失败: 目标路径不存在")
except Exception as e:
print(f"跳转路径出错: {e}")
# 恢复原始路径
os.chdir(original_path)
print(f"恢复后路径: {os.getcwd()}\n")
print("===== 5. 判断相对路径与绝对路径 =====")
relative_path = "data_single/subfile.txt"
absolute_path = os.path.join(current_path, "data_single/subfile.txt")
print(f"路径 '{relative_path}' 是否为绝对路径: {os.path.isabs(relative_path)}")
print(f"路径 '{absolute_path}' 是否为绝对路径: {os.path.isabs(absolute_path)}\n")
print("===== 6. 提取路径信息 =====")
sample_path = os.path.join(current_path, "data_multi", "level1", "example.txt")
print(f"示例路径: {sample_path}")
# 获取文件名
file_name = os.path.basename(sample_path)
print(f"文件名: {file_name}")
# 获取文件夹路径
dir_path = os.path.dirname(sample_path)
print(f"文件夹路径: {dir_path}")
# 分割路径为(文件夹路径, 文件名)元组
split_result = os.path.split(sample_path)
print(f"分割结果: {split_result}")
if __name__ == "__main__":
path_operations_demo()
print("\n所有路径操作演示完成")
二、操作文件和文件夹
os 库是 Python 标准库中用于与操作系统交互的重要模块,提供了许多文件和目录操作的功能。下面详细介绍其在文件大小查询、文件 / 文件夹删除、重命名和复制等操作的使用方法:
1. 文件大小查询
使用 os.path.getsize(path)
可以获取指定路径的文件大小,单位为字节(byte)。
示例:
import os
file_path = "example.txt"
if os.path.exists(file_path):
file_size = os.path.getsize(file_path)
print(f"文件大小:{file_size} 字节")
# 转换为KB
print(f"文件大小:{file_size / 1024:.2f} KB")
else:
print("文件不存在")
注意:该方法只能获取文件大小,若要获取目录大小,需要递归计算目录下所有文件的大小总和。
2. 文件 / 文件夹删除
-
删除文件:
os.remove(path)
用于删除指定的文件 -
删除空文件夹:
os.rmdir(path)
只能删除空文件夹 -
删除非空文件夹:需要使用
shutil.rmtree(path)
(需导入 shutil 模块)
示例:
import os
import shutil
# 删除文件
file_path = "example.txt"
if os.path.isfile(file_path):
os.remove(file_path)
print(f"文件 {file_path} 已删除")
# 删除空文件夹
empty_dir = "empty_folder"
if os.path.isdir(empty_dir):
os.rmdir(empty_dir)
print(f"空文件夹 {empty_dir} 已删除")
# 删除非空文件夹
non_empty_dir = "non_empty_folder"
if os.path.isdir(non_empty_dir):
shutil.rmtree(non_empty_dir)
print(f"非空文件夹 {non_empty_dir} 已删除")
3. 重命名文件 / 文件夹
os.rename(src, dst)
可以重命名文件或文件夹,其中 src
是原路径,dst
是新路径。
示例:
import os
# 重命名文件
old_file = "old_name.txt"
new_file = "new_name.txt"
if os.path.exists(old_file):
os.rename(old_file, new_file)
print(f"文件已重命名为 {new_file}")
# 重命名文件夹
old_dir = "old_dir"
new_dir = "new_dir"
if os.path.exists(old_dir):
os.rename(old_dir, new_dir)
print(f"文件夹已重命名为 {new_dir}")
注意:如果目标路径已存在,会抛出异常,因此建议先检查目标路径是否存在。
4. 复制文件 / 文件夹
os 库本身不直接提供复制功能,需要使用 shutil 模块:
- 复制文件:
shutil.copy(src, dst)
或shutil.copy2(src, dst)
(保留元数据) - 复制文件夹:
shutil.copytree(src, dst)
示例:
import shutil
# 复制文件
src_file = "source.txt"
dst_file = "destination.txt"
shutil.copy2(src_file, dst_file)
print(f"文件已复制到 {dst_file}")
# 复制文件夹
src_dir = "source_dir"
dst_dir = "destination_dir"
shutil.copytree(src_dir, dst_dir)
print(f"文件夹已复制到 {dst_dir}")
注意:复制文件夹时,目标文件夹必须不存在,否则会抛出异常。
综合示例
下面是一个综合运用上述操作的示例代码:
import os
import shutil
def file_operations_demo():
# 创建测试文件和文件夹
with open("test.txt", "w") as f:
f.write("测试文件内容")
os.makedirs("test_dir", exist_ok=True)
# 查询文件大小
print(f"test.txt 大小:{os.path.getsize('test.txt')} 字节")
# 重命名
os.rename("test.txt", "renamed.txt")
os.rename("test_dir", "renamed_dir")
# 复制
shutil.copy2("renamed.txt", "copied.txt")
shutil.copytree("renamed_dir", "copied_dir")
# 删除
os.remove("renamed.txt")
os.remove("copied.txt")
shutil.rmtree("renamed_dir")
shutil.rmtree("copied_dir")
print("所有操作完成")
if __name__ == "__main__":
file_operations_demo()
使用这些文件操作函数时,建议始终先检查文件 / 文件夹是否存在,并且谨慎使用删除操作,以免误删重要数据。对于复杂的文件操作,还可以结合 os.path
模块的其他函数进行路径处理。