首页 > 编程语言 >Python文件管理

Python文件管理

时间:2022-08-20 22:35:00浏览次数:70  
标签:文件 管理 Python pathlib path print Path os 目录

目录

Python文件管理

一、 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, one rror=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、 路径获取

  1. 获取当前工作目录

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

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

  2. 获取家目录

    import pathlib
    
    print(pathlib.Path.home())  # 获取当前用户的家目录
    
  3. 获取文件绝对路径

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

    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 对读取和写入进行了简单的封装,不再需要重复去打开文件和管理文件的关闭了。

  • .read_text() 读取文本
  • .read_bytes() 读取 bytes
  • .write_text() 写入文本
  • .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中的方法一样,可以自行去研究

标签:文件,管理,Python,pathlib,path,print,Path,os,目录
From: https://www.cnblogs.com/liuzhongkun/p/16608937.html

相关文章

  • Typora+picgo+github图片及文件上传
    一、本地文件上传github右上角newrepository复制https连接在本地下载:git然后找到你要上传的文件夹项目,右键点击文件夹(注意:不能选单个文件或者压缩包......
  • Navicat可视化软件、Navicat可视化软件、python操作MySQL、语法知识补充
    今日内容概要Navicat可视化软件多表查询练习题python操作MySQL知识补充今日内容详细Navicat可视化软件相关操作连接MySQL在官网上下载并安装好最新的Navicat软件......
  • win10 python mysqlclient 安装问题 已解决
    用习惯了Linux  忽然换到win10超级不习惯 今天下午就一个mysqlclient安装弄了好长时间 ,最后发现是得改名 真是想爆粗口。下面直接进入正题:下载地址  https:......
  • Python自学教程1-安装pycharm和执行环境
    Python虽然简单,但是很多没有接触过的学起来还是比较困难的。因此很多人会报班去学,我觉得不需要花那个钱,只要方向正确,加上核心知识点的提炼,自学一个月左右就能上手。我尝试......
  • 借助py2neo将csv文件导入neo4j
    下载安装建议戳我启动neo4j安装好之后以管理员权限启动cmd输入neo4j.batconsole启动neo4j在浏览器端可以打开http://localhost:7474则说明启动成功关于py2neo......
  • 通过supervisor管理laravel队列任务守护进程
    通过supervisor管理laravel队列任务守护进程背景:laravel队列,在调试使用时可以使用phpartisanqueue:work来启用队列,但是实际项目部署后,需要通过守护进程一直启动队列,在这......
  • 自动化选课(Python + selenium
    ​ 前几天听到朋友说自己选课事情,突发奇想想要搞这样一个东西,但是由于各种原因只做到以下的完成度,具体的情况也会在解释的最后留下。这个只适用于曲师大的教务系统,因为用的......
  • 深入解析 Flink 细粒度资源管理
    细粒度资源管理的背景目的Flink目前采用粗粒度的资源管理方法,其中task被部署到预定义的、通常相同的slot中,而不需要每个包含多少资源的概念。使用slot共享,可以将同一slo......
  • Bridge 2022 for Mac(br 2022文件管理软件)中文版
    Bridge2021forMac是一款组织工具应用,从AdobeBridge2021中可以查看、搜索、排序、管理和处理图像文件,还可以使用AdobeBridge2021mac中文版来创建新文件夹、对......
  • 【Python基础教程】类的定义和使用
    哈喽兄弟们,今天咱们分享一下类的定义和使用。 在Python中,类表示具有相同属性和方法的对象的集合。在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问......