一,简介
关于目录的处理,我们主要使用的是os模块
1,os模块的介绍
官方文档:os --- 操作系统接口模块 — Python 3.7.13 文档
该模块提供了与操作系统相关的函数,例如:获取系统信息,文件与目录操作,执行系统命令等。
2,主要内容
文件与目录的操作基本包含三个板块:
- 目录操作:创建,删除,复制,移动目录
- 遍历目录:获取目录下所有文件;获取目录及子目录下的所有文件
- 其他:是否为目录;文件目录是否存在;路径拼接等
二,相关模块和方法
1,相关模块:
import os
import shutil
2,相关方法:
- os有关方法
方法 | 说明 |
os.getcwd() | 返回表示当前工作目录 |
os.mkdir(name)/os.rmdir(name) | 创建目录/删除目录 |
os.makedirs(name)/os.removedirs(name) | 创建目录树/删除目录 |
os.listdir(path=None) | 获取指定目录下所有文件目录 |
os.rename(src, dst,..) | 文件目录重命名 |
os.renames(old, new) | 递归方式重命名目录或者文件 |
os.walk(top, topdown=True,…) | 获取指定目录下所有文件目录,返回目录树迭代器 |
os.remove(path, dir_fd=None) | 删除文件 |
- shutil
方法 | 说明 |
shutil.move(src, dst) | 移动目录 |
shutil.copyfileobj(src,dest,length=16*1024) | 将src内容拷贝到dest, src,dest为读写文件对象 |
shutil.copyfile(src, dst) | 整个文件拷贝 |
shutil.copymode(src, dst) | 仅拷贝权限。内容、组、用户均不变。 |
shutil.copystat(src, dst) | 仅复制所有的状态信息,包括权限,组,用户,时间等 |
shutil.copytree(src, dst) | 递归方式拷贝目录树 |
三,相关操作
1,目录创建,重命名,删除
具体步骤:
- 获取当前路径
- 在指定目录下创建新目录
- 将新创建的目录重命名
- 删除创建的目录
首先,获取当前的文件路径,使用getcwd()可以获得当前文件所处的文件路径
import os
path = os.getcwd()
print("当前目录:", path)
#输出:当前目录: D:\Jupyter\Homework of course
创建新目录:
#创建目录
create_dir = r'D:\Jupyter\Homework of course\tmp1'
rename_dir = r'D:\Jupyter\Homework of course\tmp2'
#创建目录,注意:如果目录已经存在,创建异常
os.mkdir(create_dir)
运行第一次,生成了文件目录
运行第二次,报错:
修改文件名和删除:
#修改目录名,注意,如果目录存在,重命名失败
os.rename(create_dir, rename_dir)
#删除目录
os.rmdir(rename_dir)
2,目录树创建与删除
import shutil
new_dir_tree = r'D:\Jupyter\Homework of course\tmp1\level1'
del_dir_tree = r'D:\Jupyter\Homework of course\tmp1'
#常见目录树
os.makedirs(new_dir_tree)
#删除多级目录
shutil.rmtree(del_dir_tree)
第一步的运行结果:
3,判断相关操作
要点:
- 判断文件或者目录是否存在?
- 判断指定路径是否是文件或者目录?
#判断路径是否存在
path = r'D:\Jupyter\Homework of course'
print(os.path.exists(path))
#判断路径是否是目录
print(os.path.isdir(path))
#判断路径是否是文件
fpath = r'D:\Jupyter\Homework of course\csv_write_test.csv'
print(os.path.isfile(fpath))
#三个输出都是True
4,获取文件信息
这一步主要是获取文件的状态和大小
import os
import shutil
fpath = r'D:\Jupyter\Homework of course\csv_write_test.csv'
print(os.stat(fpath))
print(os.path.getsize(fpath))
'''
Output:
os.stat_result(st_mode=33206, st_ino=5629499534259965, st_dev=3872741387, st_nlink=1, st_uid=0, st_gid=0, st_size=59, st_atime=1716737696, st_mtime=1716737669, st_ctime=1716737669)
59
'''
对于stat_result的参数说明:
字段 | 说明 |
st_mode | inode 保护模式 |
st_ino | inode 节点号。 |
st_dev | inode 驻留的设备。 |
st_nlink | inode 的链接数。 |
st_uid | 所有者的用户ID。 |
st_gid | 所有者的组ID。 |
st_size | 以字节为单位的大小; |
st_atime | 上次访问的时间。 |
st_mtime | 最后一次修改的时间。 |
st_ctime | 由操作系统报告的"ctime" |
5,文件路径操作
主要包括:
- 获取当前文件的绝对路径
- 获取指定路径的名称与目录名称
- 路径的拼接
#获取当前文件绝对路径
current_abs_path = os.path.abspath('.')
print(current_abs_path)
#获取指定路径的名称
abs_path = r'D:\Jupyter\Homework of course\csv_write_test.csv'
fname = os.path.basename(abs_path)
print("当前文件名:", fname)
fpath = os.path.dirname(abs_path)
print("当前文件路径:", fpath)
#路径拼接,为了实现代码跨平台,建议使用os.path.join
full_path = os.path.join(fpath, fname)
print("全路径:", full_path)
结果:
D:\Jupyter\Homework of course
当前文件名: csv_write_test.csv
当前文件路径: D:\Jupyter\Homework of course
全路径: D:\Jupyter\Homework of course\csv_write_test.csv
6,遍历目录
操作:
- 获取指定目录下的文件,子目录
- 获取指定目录下文件,子目录及子目录下文件与子目录
获取指定目录下的文件,子目录
root_path = r'D:\Jupyter\Homework of course'
file_list = os.listdir(root_path)
for name in file_list:
print(name)
输出:
'''
.ipynb_checkpoints
1686117568248-题目1数据 (1).csv
csv_write_test.csv
hw1
hw1.zip
hw2
hw2.zip
hw3
hw3.zip
hw4
hw4.zip
Untitled.ipynb
'''
获取指定目录下文件,子目录及子目录下文件与子目录:
使用方法:os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
返回值:目录树的生成器,每条数据组成如下: dirpath, dirnames, filenames
root_path = r'D:\Jupyter\Homework of course'
for root, _, flist in os.walk(root_path):
for fname in flist:
full_path = os.path.join(root, fname)
print(full_path)
输出: