【笔记】Python3的文件和目录操作

前言

Python3的文件和目录操作学习笔记

os模块

引入模块

1
import os

创建目录

  • 如果已存在同名目录,则会报错

<dir>:目录的路径

1
os.mkdir("<dir>")

创建多级目录

1
os.makedirs("<dir>")

删除文件或目录

  • 如果找不到文件,则会报错

<file>:文件或目录的路径

1
os.remove("<file>")

删除多级目录

<dir>:目录路径

1
os.removedirs("<dir>")

重命名文件或目录

<file_old>:重命名之前的文件或目录路径
<file_new>:重命名之后的文件或目录路径

1
os.rename("<src_old>", "<src_new>")

切换当前目录

1
os.chdir("<dir>")

获取当前目录

1
os.getcwd()

获取当前目录内的文件和目录列表

返回一个列表

  • 返回所有文件和目录名的目录列表
1
os.listdir("<dir>")

返回一个迭代器

  • 返回一个迭代器,迭代器对象中有很多属性,可以查询对应文件的属性

file.stat().st_size:文件的大小,单位字节B
file.stat().st_atime:文件最近访问时间
file.stat().st_mtime:文件最近修改时间
file.stat().st_ctime:文件创建事件(Windows)

1
2
for file in os.scandir("<file>"):
print(file.stat())

返回递归的目录和文件名

1
2
3
4
for path, dirname, filename in os.walk("<dir>"):
print(f"当前目录名: {path}")
print(f"子目录名列表: {dirname}")
print(f"子文件名列表: {filename}")

改变目录权限

1
os.chmod()

对路径的判断

获取文件名

  • 绝对路径名的去掉目录部分

<file>:文件路径

1
os.path.basename("<file>")

获取目录名

  • 绝对路径名的去掉文件部分
1
os.path.dirname("<file>")

获取文件名和目录名

  • 获取包含文件名和目录名的元组
1
2
print(f"目录名: {os.path.split('<file>')[0]}")
print(f"文件名: {os.path.split('<file>')[1]}")

组合成路径名

1
os.path.join()

获取文件最近访问时间

1
2
time = os.path.getatime("<file>")
print(datetime.datetime.fromtimestamp(time))

获取文件创建时间

1
2
time = os.path.getctime("<file>")
print(datetime.datetime.fromtimestamp(time))

获取文件修改时间

1
2
time = os.path.getmtime("<file>")
print(datetime.datetime.fromtimestamp(time))

获取文件大小

1
os.path.getsize("<file>")

判断文件是否存在

1
os.path.exists()

判断路径是否为绝对路径

1
os.path.isabs()

判断路径是否为目录

1
os.path.isdir()

glob模块

  • 检索指定文件或目录

引入模块

1
import glob

获取匹配到的文件

<file>:文件或目录名

**:模糊匹配当前目录下的所有文件及目录
**/:模糊匹配当前目录下的所有目录

*<keywords>*:关键字模糊匹配
recursive=True:递归操作

1
2
3
glob.glob("<file>")

glob.glob("<file>", recursive=True)

shutil模块

引入模块

1
import shutil

拷贝文件

  • 如果目标目录不存在,则会自动创建

<file_old>:拷贝前的文件路径
<dir>:拷贝后的目录路径
<file_new>:拷贝后的文件路径

1
2
shutil.copy("<file_old>", "<dir>")
shutil.copy("<file_old>", "<dir>/<file_old>")
  • 拷贝后重新命名
1
shutil.copy("<file_old>", "<dir>/<file_new>")

拷贝目录

<dir_old>:拷贝前的目录路径
<dir_new>:拷贝后的目录路径

1
shutil.copytree("<file_old>", "<file_new>")

移动文件或目录

<file_old>:移动前的文件路径
<file_new>:移动后的文件路径

1
shutil.move("<file_old>", "<file_new>")

<dir_old>:移动前的目录路径
<dir_new>:移动后的目录路径

1
shutil.move("<dir_old>", "<dir_new>/")

删除目录

  • 可以删除多级目录

<dir>:目录路径

1
shutil.rmtree("<dir>")

pathlib模块

  • 利用pathlib模块可以替代os.path实现快速查找文件和目录

引入模块

1
from pathlib import Path

创建Path对象

  • 使用pathlib时,需要创建Path对象,操作文件其实就是对Path对象的操作

<src>:文件或目录的绝对路径或相对路径

1
file = Path("<src>")

搜索

  • 搜索当前目录下的所有文件和目录

<dir>:指定一个目录,作为开始搜索的根目录
<keywords>:关键字

1
result = list(file.glob("*<keywords>*"))

递归搜索

  • 搜索当前目录及其子目录的所有文件和目录,返回一个列表

<dir>:指定一个目录,作为开始搜索的根目录
<keywords>:关键字

1
result = list(file.rglob("*<keywords>*"))
获取所有文件和目录
  • 获取当前目录及其子目录下的所有文件和目录
1
result = list(file.rglob("*"))

打开文件

<file>:指定文件

1
file.open()

获取相对路径

  • 获取指定文件或目录距离代码所在目录的相对路径
1
file.parent

拆分相对路径的路径层级

  • 返回一个拆分相对路径所有层级的列表
1
file.parents
  • 返回一个拆分相对路径所有层级的元祖
1
file.parts

获取绝对路径

  • 获取指定文件或目录的绝对路径
1
file.resolve()
  • 获取代码所在目录的绝对路径
1
file.cwd()

创建目录

1
file.makedir()

创建多级

  • 如果指定的目录不存在上级目录,则一并创建多级目录
1
file.makedir(parents=True)

重命名文件或目录

<name_new>:新的文件名

1
file.rename("<name_new>")

移动文件或目录

<path_new>:新的路径

1
file.replace(<path_new>)

删除文件或空目录

  • 如果目录内存在文件,则会报错
1
file.unlink()

判断文件或目录是否存在

  • 返回一个布尔值,如果存在返回True,不存在返回False
1
file.exists()

判断是否是一个文件

1
file.is_file()

判断是否是一个目录

1
file.is_dir()

直接拼接路径

1
file = file/file

转换格式

  • 转换后得到的是一个Path对象,需要通过open函数保存到本地

.<str>:转换格式后的后缀名

1
file = file.suffix(".<str>")

文件读写

1
2
with file.open() as f:
...

完成

参考文献

哔哩哔哩——Python-清风
哔哩哔哩——千锋教育