百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python文件操作pathlib(python文件操作步骤)

off999 2024-09-20 22:40 44 浏览 0 评论

pathlib 文件操作模块

阅读需要 15分钟。

  • 之使用 python 操作文件路径,最苦开始使用 os.path。
  • pathlib 库从 python3.4 开始,到 python3.6 已经比较成熟。

为什么会有pathlib模块:规范统一

  1. 老的路径操作函数比较混乱, os, os.path 当中,现在统一可以用 pathlib 管理。
  2. 老的API对于不同操作系统的处理 win,mac 以及 linux 不方便
  3. 老方法使用的是函数,返回的路径通常是个”字符串“,但是字符串还是路径
  4. 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\admin


home目录在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\realpython

Path对象的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 直到没有重复的名字。

相关推荐

ie浏览器9(IE浏览器9.0如何升级)

1、首先,我们点击开始菜单,找到控制面板,点击一下。2、之后,找到程序和功能选项,点击一下。3、点击进入后,我们找到左边的打开或关闭windows功能,点击一下。4、点击进入后,找到Internet...

hp1020打印机驱动怎么下载(hp1020打印机驱动怎么下载)

惠普1020打印机驱动怎么安装:  1.首先到下载软件名称:惠普1020打印机驱动程序官方版(支持win7/8)32位/64位软件大小:5.09MB更新时间:2014-09-05立即下载  2.然后...

win2003是windows7系统(win2003哪个版本好)

win2003是专门用于服务器的操作系统,现在最主流的windows服务器系统主要是win2003server和win2008server,winXP是个人电脑专用的操作系统,现在微软已经不再提供XP...

路由器账号和密码忘了怎么办

你好,如果你忘记了路由器的用户名和密码,你可以尝试重置一下路由器,大多数路由器都配备了一个复位按键。在重置路由器之后,用户名和密码将被还原为默认值,你可以在路由器的用户手册或厂家网站上找到默认的用户名...

win10永久禁止自动更新(win10禁止自动更新彻底)

阻止Windows10自动更新的方法如下:使用“本地组策略编辑器”:按下“Win+R”键,输入“gpedit.msc”打开本地组策略编辑器,找到“计算机配置”>“管理模板”>“W...

联想笔记本怎么看配置和型号

联想笔记本看配置的方法如下1、打开电脑,点击桌面的计算机,右键菜单里选择【属性】;打开后,即可看到电脑系统的大概信息;2、如果要看比较详细的设备相关信息,点击桌面的计算机,点击右键,在菜单里选择【系统...

怎样把打印机连接到电脑上(怎么把打印机连接电脑上)
  • 怎样把打印机连接到电脑上(怎么把打印机连接电脑上)
  • 怎样把打印机连接到电脑上(怎么把打印机连接电脑上)
  • 怎样把打印机连接到电脑上(怎么把打印机连接电脑上)
  • 怎样把打印机连接到电脑上(怎么把打印机连接电脑上)
photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
  • photoshop6序列号(photoshop8.01序列号)
win10下载应用商店(win10应用商店打不开)

1、点击Win10系统的开始菜单,然后在点击应用商店;2、打开Win10应用商店后,在搜索框里输入想要搜索的应用软件,然后点击检索;3、点击搜索到的应用,点击安装;4、点击安装后,系统会提示要切换到这...

dell电脑重装系统win10(dell 重装win10系统)

戴尔笔记本重装系统win10的步骤如下:制作好wepe启动盘之后,将win10系统iso镜像直接复制到U盘。在需要重装系统的戴尔电脑上插入pe启动盘,重启后不停按F12启动快捷键,调出启动菜单对话框,...

android升级包下载安装(android 升级包)

打开手机系统更新升级,前提是官方有新系统推送才能更新  哪个大不一定,但一般规律如下:  1、小版本的更新,通常越更新越大。比如3.1更新到3.2,通常是修复bug,代码量通常会增大,体积就会增大。 ...

hdd硬盘和ssd(ssd硬盘和hdd硬盘是什么意思)

HDD硬盘和SSD硬盘是两种不同类型的电脑存储设备,它们有着以下区别:1.工作原理:HDD硬盘使用机械旋转的磁盘和读写磁头来存储和读取数据,而SSD硬盘则使用闪存存储数据,类似于USB闪存盘。2....

电脑免费软件下载大全(电脑上免费的下载软件)

正常情况下,如果我们想要在自己的电脑上面下载一个不要钱的单机游戏,那么我们是可以直接在我们的软件管理中心进行一个下载的,这个时候我们只需要通过一个权限就能够正常的下载,当然我们也是可以在一些小游戏的软...

mpp文件转换excel(mpp转换成pdf)

要将Excel表格转换为MPP格式,您可以按照以下步骤操作:1.打开Excel表格并确保数据按照项目的不同阶段或任务进行组织。2.将Excel表格中的数据复制到一个新的MicrosoftProj...

win7旗舰版开机密码忘记按f2

方法如下:开始-控制面板-用户帐户;在打开的更改用户帐户界面点击要更改的帐户;然后点击帐户左面的更改密码按钮;在打开的页面上,输入一次当前使用的密码,输入2次要更改的新密码然后保存退出就可以了...

取消回复欢迎 发表评论: