Python四大模块文件管理介绍

Python
330
0
0
2023-03-02
标签   Python库
目录
  • 一、os模块
  • 1、方法大纲
  • 2、常用方法
  • 二、glob模块
  • 1、方法大纲
  • 2、使用示例
  • 三、shutil模块
  • 1、方法大纲
  • 2、压缩包
  • 四、pathlib模块
  • 1、对比图
  • 2、路径获取
  • 3、文件属性
  • 4、文件判断
  • 5、路径拼接
  • 6、正则匹配
  • 7、读写操作

一、os模块

1、方法大纲

2、常用方法

方法

描述

getcwd()

获取当前工作目录

chdir(path)

将当前的工作目录更改为指定的路径

listdir(path=None)

列出指定目录中的文件名。如果 path 为 None,则使用 path=‘.’。

mkdir(path, mode=511, *, dir_fd=None)

创建目录

makedirs(name, mode=511, exist_ok=False)

递归创建多层目录

rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)

重命名文件或目录

remove(path, *, dir_fd=None)

删除文件

rmdir(path, *, dir_fd=None)

删除目录

removedirs(name)

递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空抛出异常。

walk(top, topdown=True, onerror=None, followlinks=False)

遍历 top 路径下的所有子目录,返回一个包含 3 个元素的元组:(dirpath, dirnames, filenames)。

os.curdir

指代当前目录(‘.’)

os.pardir

指代上一级目录(‘…’)

os.sep

路径分割符(Windows 为 ‘\’,Linux 为 ‘/’)

os.linesep

行终止符(Windows 为 ‘\r\n’,Linux 为 ‘\n’)

os.name

指代当前使用的操作系统(Windows 系统为 ‘nt’,Linux 为 ‘posix’)

二、glob模块

1、方法大纲

glob模块也是Python标准库中一个重要的模块,主要用来查找符合特定规则的目录和文件,并将搜索的到的结果返回到一个列表中。使用这个模块最主要的原因就是,该模块支持几个特殊的正则通配符,用起来贼方便,这个将会在下方为大家进行详细讲解。

2、使用示例

import glob
path1 = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\[0-9].png"
print(glob.glob(path1))
path2 = r"C:\Users\黄伟\Desktop\publish\os模块\test_shutil_a\[0-9a-z].*"
print(glob.glob(path2))

注意:这个函数里面还有一个参数,recursive,当其为真时,则模式’**'将与任何文件匹配,并且

零或更多目录和子目录。

三、shutil模块

1、方法大纲

os模块是Python标准库中一个重要的模块,里面提供了对目录和文件的一般常用操作。而Python另外一个标准库——shutil模块,它作为os模块的补充,提供了复制、移动、删除、压缩、解压等操作,这些 os 模块中一般是没有提供的。但是需要注意的是:shutil模块对压缩包的处理是调用ZipFileTarFile这两个模块来进行的。

2、压缩包

对压缩包管理是使用zipfile模块

import zipfile
import os
file_list = os.listdir(os.getcwd())  # 获取当前目录
# 将上述所有文件,进行打包,使用“w”
with zipfile.ZipFile(r"我创建的压缩包.zip", "w") as zipobj:  # 对文件进行压缩
    for file in file_list:
        zipobj.write(file)  # 将文件写入压缩包中

四、pathlib模块

1、对比图

操作

os and os.path

pathlib

绝对路径

os.path.abspath

Path.resolve

修改权限

os.chmod

Path.chmod

创建目录

os.mkdir

Path.mkdir

重命名

os.rename

Path.rename

移动

os.replace

Path.replace

删除目录

os.rmdir

Path.rmdir

删除文件

os.remove, os.unlink

Path.unlink

工作目录

os.getcwd

Path.cwd

是否存在

os.path.exists

Path.exists

用户目录

os.path.expanduser

Path.expanduser and Path.home

是否为目录

os.path.isdir

Path.is_dir

是否为文件

os.path.isfile

Path.is_file

是否为连接

os.path.islink

Path.is_symlink

文件属性

os.stat

Path.stat, Path.owner, Path.group

是否为绝对路径

os.path.isabs

PurePath.is_absolute

路径拼接

os.path.join

PurePath.joinpath

文件名

os.path.basename

PurePath.name

上级目录

os.path.dirname

PurePath.parent

同名文件

os.path.samefile

Path.samefile

后缀

os.path.splitext

PurePath.suffix

2、路径获取

获取当前工作目录

import pathlib
print(pathlib.Path.cwd())  # 虽然在这里打印出来的很像一个字符串,但实际上得到的是一个WindowsPath对象
# 其实现了 __repr__ 和 __str__ 底层方法
print(pathlib.Path(__file__))  # 获取当前文件路径

工作目录是在哪个目录下运行你的程序,不是项目目录

获取家目录

import pathlib
print(pathlib.Path.home())  # 获取当前用户的家目录

获取文件绝对路径

from pathlib import Path
# 当前文件路径
p = Path(__file__)
print(p)  
print(p.absolute())  # 将路径转换为绝对路径,p.resolve()功能也是一样的

遍历当前目录

from pathlib import Path
# 当前文件路径
p = Path('files')
for i in p.iterdir():
    print(i.absolute())
"""运行结果:
C:\Users\3500\PycharmProjects\untitled3\demo\files\json
C:\Users\3500\PycharmProjects\untitled3\demo\files\username.txt
C:\Users\3500\PycharmProjects\untitled3\demo\files\yaml
"""

3、文件属性

from pathlib import Path
# 当前文件路径
p = Path(__file__)
print(p.absolute())   # 获取绝对路径
print(p.resolve())    # 获取绝对路径
print(p.name)   # 获取文件名称 'test.py'
print(p.stem)    # 只要文件名,不要后缀 test
print(p.suffix)  # 获取文件 后缀.py
print(p.suffixes)  # 文件所有的后缀 ['.py']
print(p.parts)  # 拆分('C:\\', 'Users', '3500', 'PycharmProjects', 'untitled3', 'demo', 'test.py')
print(p.parent)  # 获取当前路径的父级目录,C:\Users\35000\PycharmProjects\untitled3\demo
print(p.parent.parent)  # C:\Users\3500\PycharmProjects\untitled3
print(p.parents)  # 所有的父级 <WindowsPath.parents>
print(p.anchor)  # 锚,目录前面的部分 C:\ 或者 /

4、文件判断

from pathlib import Path
# 1.  is_file() 判断是不是文件
print(Path.cwd().is_file())  # False
# 2.  is_dir() 判断是不是文件夹
print(Path.cwd().is_dir())  # True
# exists() 判断文件是否存在
p = Path('./data.json')
print(p.exists())  # True or False
from pathlib import Path
# 当前文件路径
p = Path(__file__)  # 获取当前文件的路径
print(p.is_absolute())  # True

5、路径拼接

from pathlib import Path
# 当前文件路径
p = Path('./')
print(p.absolute())  # C:\Users\3500\PycharmProjects\untitled3\demo
print(p.joinpath('data.json'))  # data.json
print(p.joinpath('data.json').absolute())   # C:\Users\3500\PycharmProjects\untitled3\demo\data.json
# 拼接多层
print(p.joinpath('files', 'data.json'))   # files\data.json
print(p.joinpath('files', 'data.json').absolute())  # C:\Users\3500\PycharmProjects\untitled3\demo\files\data.json

6、正则匹配

使用模式匹配(正则表达式)匹配指定的路径。glob 只会匹配当前目录下, rglob 会递归所有子目录

比如在当前脚本的 files 目录有以下文件夹和子文件

from pathlib import Path
p = Path('files')
# glob 只会遍历查找当前目录
print(p.glob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.glob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.glob('*.yml')])  # []
# rglob 只会遍历查找当前目录以及其子目录
print(p.rglob('*.txt'))  # <generator object Path.glob at 0x000001A44565A518>
print([i for i in p.rglob('*.txt')])  # [WindowsPath('files/username.txt')]
print([i for i in p.rglob('*.yml')])  # [WindowsPath('files/yaml/aa.yml'), WindowsPath('files/yaml/bb.yml')]
p_ = Path('data.json')
# math 检查匹配规则
print(p_.match('*.json'))  # True

7、读写操作

pathlib 对读取和写入进行了简单的封装,不再需要重复去打开文件和管理文件的关闭了。

  1. .read_text() 读取文本
  2. .read_bytes() 读取 bytes
  3. .write_text() 写入文本
  4. .write_bytes() 写入 tytes
from pathlib import Path
p = Path('yo.txt')
p.write_text("hello world")
print(p.read_text())  # hello world

file.write 操作使用的是 w 模式,如果之前已经有文件内容,将会被覆盖。

当然,pathlib还可以进行文件的创建,删除,以及修改操作,其与os中的方法一样,可以自行去研究