Python文件操作pathlib(python文件操作步骤)
off999 2024-09-20 22:40 34 浏览 0 评论
pathlib 文件操作模块
阅读需要 15分钟。
- 之使用 python 操作文件路径,最苦开始使用 os.path。
- pathlib 库从 python3.4 开始,到 python3.6 已经比较成熟。
为什么会有pathlib模块:规范统一
- 老的路径操作函数比较混乱, os, os.path 当中,现在统一可以用 pathlib 管理。
- 老的API对于不同操作系统的处理 win,mac 以及 linux 不方便
- 老方法使用的是函数,返回的路径通常是个”字符串“,但是字符串还是路径
- pathlib 使用简单功能丰富。
pathlib使用 import mathlob 或者 from pathlib import Path
from pathlib import Path当前目录在哪里
from pathlib import Path
pwd = Path.cwd()
print(pwd)home目录
from pathlib import Path
pwd = Path.cwd()
print(pwd)
print(Path.home())
C:\Users\adminhome目录在Windows上通常是 c:/User/用户名 这个目录,而Linux通常也是用户的主目录
下面是一个linux服务器上root用户的home目录 /root
Paht的各种用法
- 根据字符串构建目录: Path(r"C:\Users\philipp\realpython\file.txt")
p =Path(r"C:\Users\philipp\realpython\file.txt")
print(p,)
print(p.parent) # 获取上级目录C:\Users\philipp\realpython\file.txt
C:\Users\philipp\realpythonPath对象的parent方法可以找到它的上层目录,一直可以找到最上层的根目录
- 获取当前执行的Python文件的完整路径和目录
print(Path(__file__))
print(Path(__file__).parent)
- 移动文件:比如将某个目录下的 txt文本文件移到到其他目录
for file_path in Path.cwd().glob("*.txt"):
# new_path = Path("archive",file_path.name)
new_path = Path("archive") / file_path.name
#以上两种方式都是构建新目录文件 的路径,效果是一样的
print(new_path)
file_path.rename(new_path)
- 组合文件路径 joinpath
a = Path.home().joinpath("python", "scripts", "test.py")
print(a)Paht对象的关键组件
- .name: 文件名,没有目录路径 a.txt
- .stem: 没有扩展名的文件名 a
- .suffix: 文件后缀
- .anchor: 文件作者
- .parent: 父目录
>>> from pathlib import Path
>>> path = Path(r"C:\Users\gahjelle\realpython\test.md")
>>> path
WindowsPath('C:/Users/gahjelle/realpython/test.md')
>>> path.name
'test.md'
>>> path.stem
'test'
>>> path.suffix
'.md'
>>> path.anchor
'C:\\'
>>> path.parent
WindowsPath('C:/Users/gahjelle/realpython")
>>> path.parent.parent
WindowsPath('C:/Users/gahjelle')使用 / 斜杠 连接目录如下
path.parent.parent / f"new{path.suffix}"PosixPath('/home/gahjelle/new.md')读取文件
假设有一个文件 的内容如下
<!-- shopping_list.md -->
# Shopping List
## Fruit
* Banana
* Apple
* Peach
## Candy
* Chocolate
* Nougat Bits
# read_shopping_list.py
from pathlib import Path
path = Path.cwd() / "shopping_list.md"
with path.open(mode="r", encoding="utf-8") as md_file:
content = md_file.read()
groceries = [line for line in content.splitlines() if line.startswith("*")]
print("\n".join(groceries))- .read_text() 字符串方式读取文件
- .read_bytes() 二进制方式读取文件
- .write_text() 写入文本到 文件
- .write_bytes() 写入二进制数据到 文件
from pathlib import Path
path = Path.cwd() / "shopping_list.md"
content = path.read_text(encoding="utf-8")
groceries = [line for line in content.splitlines() if line.startswith("*")]
print("\n".join(groceries))
#写文件
Path("plain_list.md").write_text("\n".join(groceries), encoding="utf-8")
重命名文件
>>> from pathlib import Path
>>> txt_path = Path("/home/gahjelle/realpython/hello.txt")
>>> txt_path
PosixPath("/home/gahjelle/realpython/hello.txt")
>>> md_path = txt_path.with_suffix(".md")
PosixPath('/home/gahjelle/realpython/hello.md')
>>> txt_path.replace(md_path)with_suffix 构建一个新的Paht 把 .txt 后缀修改为 .md
使用 replace函数把电脑上的文件名重新命名
复制文件:其中一种办法 内容复制创建新文件
>>> source = Path("shopping_list.md")
>>> destination = source.with_stem("shopping_list_02")
>>> destination.write_bytes(source.read_bytes())创建新文件 touch 函数
>>> from pathlib import Path
>>> filename = Path("hello.txt")
>>> filename.exists()
False
>>> filename.touch()
>>> filename.exists()
True
>>> filename.touch()如果文件已经存在,调用touch函数时exist_ok为False则会报错。
>>> filename.touch(exist_ok=False)
Traceback (most recent call last):
...
FileExistsError: [Errno 17] File exists: 'hello.txt'Pathlib应用小例子
统计不同文件类型的数量
>>> from pathlib import Path
>>> from collections import Counter
>>> Counter(path.suffix for path in Path.cwd().iterdir())
Counter({'.md': 2, '.txt': 4, '.pdf': 2, '.py': 1})>>> from collections import Counter
>>> Counter(path.suffix for path in Path.cwd().iterdir())
Counter({'': 8, '.dll': 4, '.txt': 2, '.exe': 2})
>>>
显示目录的树形结构
def tree(directory):
print(f"+ {directory}")
for path in sorted(directory.rglob("*")):
depth = len(path.relative_to(directory).parts)
spacer = " " * depth
print(f"{spacer}+ {path.name}")查找最近修改的文件
>> from pathlib import Path
>>> from datetime import datetime
>>> directory = Path.cwd()
>>> time, file_path = max((f.stat().st_mtime, f) for f in directory.iterdir())
>>> print(datetime.fromtimestamp(time), file_path)2022-04-03 09:30:57.448853 C:\Users\admin\AppData\Local\Programs\Python\Python38\Scripts
>>> 创建唯一的文件名,不重名
def unique_path(directory, name_pattern):
counter = 0
while True:
counter += 1
path = directory / name_pattern.format(counter)
if not path.exists():
return path代码很简单实际上就是有一个计数器 counter作为文件名中的一部分如果存在同名的文件,counter 加1 直到没有重复的名字。
相关推荐
- imei怎么下载(imei changer apk)
-
如果您的steam序列号激活了,可以尝试以下方法下载:1.使用steam自带的下载工具,如“下载工具”,在软件的“下载”选项卡中选择“序列号下载”。2.在下载页面中,选择要下载的游戏,然后点击“下...
- 电脑系统优化软件哪个好(系统优化软件排行榜)
-
有必要用,非常好用,WINDOWS优化大师是一个网络上下载率极高的系统维护软件。多年未曾清理过系统和硬盘的电脑,系统内部将产生大量的垃圾文件、临时文件、废旧程序等等win10系统不需要经常更新,关闭...
- 重装系统后硬盘不见了(重装系统后磁盘不见了)
-
硬盘不见可能是因为重装系统时未正确安装驱动程序或未对硬件进行正确设置。你可以按以下步骤排查问题:进入BIOS检查硬盘是否被识别,尝试重新连接数据线和电源线,更新或安装适当的硬件驱动程序,或者使用硬件故...
- 冰封u盘装win7系统教程图解(冰封u盘启动装机教程)
-
1.查找激活工具:通常来说,Win7冰封系统已经包含了必要的驱动,所以如果你的电脑上并没有出现设备错误,那你就可以正常使用。如果你需要添加任何驱动,请尝试从厂商下载相应的驱动并执行自动安装程序。如果...
- uefi模式下找不到硬盘(uefi引导找不到硬盘)
-
首先你的安装盘必须是从UEFI启动的,然后它才能安装为UEFI启动。(条件:Fat32文件系统,efi文件夹)其次你MBR+BIOS的系统想换成GPT+EFI的,分区得做一点改动,腾出来100M的空...
- win7怎么安装蓝牙驱动程序(win7电脑安装蓝牙驱动教程)
-
方法如下: 1、再开始里点击控制版面,点击【硬件和声音】找到【添加设备】 2、之后再选择你要添加的蓝牙耳机。 3、系统就会提示正在与蓝牙适配器连接,然后提示添加成功。 4、点击“开始”-“...
- 怎么装系统win7旗舰版(电脑怎么装win7旗舰版)
-
1、目前支持64位的Wincc版本有:WinccV7Sp3、WinccV11Sp2、WinccV12。2、Wincc的V11与V12两个版本不能共存,即不能同时安装在同一台电脑上。上述这两...
- 怎样恢复桌面图标原样(怎样恢复桌面图标原样显示)
-
桌面图标恢复原样步骤方法如下:1.右键点击图标、并点击‘属性’两字,再点击‘打开文件位置‘2.然后找到文件所在的位置,然后暂时将文件在一旁放着3.然后再去点击‘更换图标’这四个字,找到刚刚打开的文件...
- 消除u盘写保护(怎么解除u盘写保护)
-
如果您的U盘启用了写保护功能,可以尝试以下几种方法来解除写保护:1.检查U盘上的物理写保护开关:部分U盘有一个物理的写保护开关,可以在U盘的外壳上找到。请确保开关处于非写保护状态。2.使用CMD命...
- microsoft国际版(微软国际版bing)
-
win10系统自带的edge浏览器不分国内版和国际版。搜索引擎Bing分为国内版和国际版,区别如下一、迎合不同人群的需求。国际版显得更加个性,他迎合了不同人群的需求,在收缩上更加方便化和智能化,后期可...
- 为什么格式化sd卡后不能用了
-
SD卡受损后不格式化直接修复的方法:1,当系统发现SD卡受损之后,会提示进行格式化。2,把SD卡插入读卡器,接到电脑USB后,电脑提示格式化,点取消。然后查看一下属性。直接使用属性中的工具-开始检查...
欢迎 你 发表评论:
- 一周热门
-
-
抖音上好看的小姐姐,Python给你都下载了
-
全网最简单易懂!495页Python漫画教程,高清PDF版免费下载
-
Python 3.14 的 UUIDv6/v7/v8 上新,别再用 uuid4 () 啦!
-
python入门到脱坑 输入与输出—str()函数
-
宝塔面板如何添加免费waf防火墙?(宝塔面板开启https)
-
飞牛NAS部署TVGate Docker项目,实现内网一键转发、代理、jx
-
Python三目运算基础与进阶_python三目运算符判断三个变量
-
(新版)Python 分布式爬虫与 JS 逆向进阶实战吾爱分享
-
慕ke 前端工程师2024「完整」
-
失业程序员复习python笔记——条件与循环
-
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
