python rpa_(RPA学习)Python 之 Pathlib 模块

原标题:(RPA学习)Python 之 Pathlib 模块

艺赛旗 RPA9.0全新首发免费下载 点击下载

http://www.i-search.com.cn/index.html?from=line9

读文件和写文件

在我们使用 open 来操作文件读写操作的时候, 不仅可以使用字符串格式的路径,对于 pathlib 生成的路径完全可以直接使用:

path = pathlib.Path.cwd() / 'test.md'

with open(path, mode='r') as fid:

headers = [line.strip() for line in fid if line.startswith('#')]

print('\n'.join(headers))

或者在 pathlib 的基础使用 open, 我推荐使用下面的方式:

import pathlib

DIR_PATH = pathlib.Path("/Users/chennan/CDM") / "2000" / "hehe.txt"

with DIR_PATH.open("r") as fs:

data = fs.read()

print(data)

这样写的好处就是 open 里面我们不需要再去传入路径了,直接指定文件读写模式即可。实际上这里的 open 方法,底层也是调用了 os.open 的方法。使用哪种方式看个人的喜好。

pathlib 还提供几种文件的读写方式:

可以不用再使用 with open 的形式即可以进行读写。

.read_text(): 找到对应的路径然后打开文件,读成str格式。等同open操作文件的"r"格式。

.read_bytes(): 读取字节流的方式。等同open操作文件的"rb"格式。

.write_text(): 文件的写的操作,等同open操作文件的"w"格式。

.write_bytes(): 文件的写的操作,等同open操作文件的"wb"格式。

使用 resolve 可以通过传入文件名,来返回文件的完整路径,使用方式如下

import pathlib

py_path =pathlib.Path("superdemo.py")

print(py_path.resolve())

输出

/Users/chennan/pythonproject/demo/superdemo.py

需要注意的是 "superdemo.py" 文件要和我当前的程序文件在同一级目录。

选择路径的不同组成部分

pathlib 还提供了很多路径操作的属性,这些属性可以选择路径的不用部位,如

.name: 可以获取文件的名字,包含拓展名。

.parent: 返回上级文件夹的名字

.stem: 获取文件名不包含拓展名

.suffix: 获取文件的拓展名

.anchor: 类似盘符的一个东西,

import pathlib

now_path = pathlib.Path.cwd() / "demo.txt"

print("name",now_path.name)

print("stem",now_path.stem)

print("suffix",now_path.suffix)

print("parent",now_path.parent)

print("anchor",now_path.anchor)

输出:

name demo.txt

stem demo

suffix .txt

parent /Users/chennan/pythonproject/demo

anchor /

移动和删除文件

当然 pathlib 还可以支持文件其他操作,像移动,更新,甚至删除文件,但是使用这些方法的时候要小心因为,使用过程不用有任何的错误提示即使文件不存在也不会出现等待的情况。

使用 replace 方法可以移动文件,如果文件存在则会覆盖。为避免文件可能被覆盖,最简单的方法是在替换之前测试目标是否存在。

import pathlib

destination = pathlib.Path.cwd() / "target"

source = pathlib.Path.cwd() / "demo.txt"

if not destination.exists():

source.replace(destination)

但是上面的方法存在问题就是,在多个进程多 destination 进行的操作的时候就会现问题,可以使用下面的方法避免这个问题。也就是说上面的方法适合单个文件的操作。

import pathlib

destination = pathlib.Path.cwd() / "target"

source = pathlib.Path.cwd() / "demo.txt"

with destination.open(mode='xb') as fid:

#xb表示文件不存在才操作

fid.write(source.read_bytes())

当 destination 文件存在的时候上面的代码就会出现 FileExistsError 异常。

从技术上讲,这会复制一个文件。 要执行移动,只需在复制完成后删除源即可。

使用 with_name 和 with.shuffix 可以修改文件名字或者后缀。

import pathlib

source = pathlib.Path.cwd() / "demo.py"

source.replace(source.with_suffix(".txt")) #修改后缀并移动文件,即重命名

可以使用.rmdir()和.unlink() 来删除文件。

几个 pathlib 的使用例子

统计文件个数

我们可以使用.iterdir 方法获取当前文件下的所以文件.

import pathlib

from collections import Counter

now_path = pathlib.Path.cwd()

gen = (i.suffix for i in now_path.iterdir())

print(Counter(gen))

输出:

Counter({'.py': 16, '': 11, '.txt': 1, '.png': 1, '.csv': 1})

通过配合使用 collections 模块的 Counter 方法,我们获取了当文件夹下文件类型情况。

前面我们说过 glob 模块点这里了解【glob 模块的使用】,同样的 pathlib 也有 glob 方法和 rglob 方法,不同的是 glob 模块里的 glob 方法结果是列表形式的,iglob 是生成器类型,在这里 pathlib 的 glob 模块返回的是生成器类型,然后 pathlib 还有一个支持递归操作的 rglob 方法。

下面的这个操作我通过使用 glob 方法,设定规则进行文件的匹配。

import pathlib

from collections import Counter

gen =(p.suffix for p in pathlib.Path.cwd().glob('*.py'))

print(Counter(gen))

展示目录树

下一个示例定义了一个函数 tree(),该函数的作用是打印一个表示文件层次结构的可视树,该树以一个给定目录为根。因为想列出其子目录,所以我们要使用.rglob() 方法:

import pathlib

from collections import Counter

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}')

now_path = pathlib.Path.cwd()

if __name__ == '__main__':

tree(now_path)

其中 relative_to 的方法的作用是返回 path 相对于 directory 的路径。

parts 方法可以返回路径的各部分。例如

import pathlib

now_path = pathlib.Path.cwd()

if __name__ == '__main__':

print(now_path.parts)

返回:

('/', 'Users', 'chennan', 'pythonproject', 'demo')

获取文件最后一次修改时间

iterdir(),.glob() 和.rglob() 方法非常适合于生成器表达式和列表理解。

使用 stat()方法可以获取文件的一些基本信息,使用.stat().st_mtime 可以获取文件最后一次修改的信息

import pathlib

now_path = pathlib.Path.cwd()

from datetime import datetime

time, file_path = max((f.stat().st_mtime, f) for f in now_path.iterdir())

print(datetime.fromtimestamp(time), file_path)

甚至可以使用类似的表达式获取上次修改的文件内容

import pathlib

from datetime import datetime

now_path =pathlib.Path.cwd()

result = max((f.stat().st_mtime, f) for f in now_path.iterdir())[1]

print(result.read_text())

.stat().st_mtime 会返回文件的时间戳,可以使用 datetime 或者 time 模块对时间格式进行进一步转换

其他内容

关于 pathlib.Path 格式路径转换为字符串类型

因为通过 pathlib 模块操作生成的路径,不能直接应用字符串的一些操作,所以需要转换成字符串,虽然可以使用 str()函数进行转换,但是安全性不高,建议使用 os.fspath() 方法,因为如果路径格式非法的,可以抛出一个异常。str() 就不能做到这一点。

拼接符号 "/" 背后的秘密

/ 运算符由 __truediv__()方法定义。 实际上,如果你看一下 pathlib 的源代码,你会看到类似的东西。

class PurePath(object):

def __truediv__(self, key):

return self._make_child((key,))

后记

从 Python 3.4 开始,pathlib 已在标准库中提供。 使用 pathlib,文件路径可以由适当的 Path 对象表示,而不是像以前一样用纯字符串表示。 这些对象使代码处理文件路径:

更容易阅读,特别是可以使用“/”将路径连接在一起

更强大,直接在对象上提供最必要的方法和属性

在操作系统中更加一致,因为 Path 对象隐藏了不同系统的特性返回搜狐,查看更多

责任编辑:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10文件夹加密_(十六)小众但好用:免费开源免注册的同步盘加密工具 Cryptomator...

之前写过同步盘加密工具 boxcryptor,今天给大家推荐另一款开源免费多平台的同步盘加密工具 Cryptomator。节省时间,直接开始。Cryptomator 官方网站:点击这里首先简单对比一下 Cryptomator 和 boxcryptor。Cryptomator 加密原理和 boxcryptor…

iis7 php5 isapi配置,Windows7 IIS7下以FastCgi和ISAPI方法安装配置PHP5教程

说到PHP环境配置与安装,通常以Apache搭载PHP配置为主,随着PHP版本不断更新,对Windows IIS平台的支持也越来越好,在Windows IIS平台上配置安装PHP环境也越来越方便。  在完成Windows 7上搭建ApachePHPMysql环境搭建后&#xff0c…

simulink仿真及代码生成技术入门到精通_Simulink仿真零基础入门到精通实用教学教程 自学全套...

Simulink仿真零基础入门到精通实用教学教程 自学全套,以教程文字为主,毕业论文和报告均可以借鉴。Simulink是电气工程必学的模型仿真专业工具软件,非常的实用。小编在全网中搜索都没有找到非常系统的学习教程和教材,想学习却找不到…

plupload怎么设置属性_店铺收银系统怎么用?好收银系统能提升店铺效率

经营一家店铺,无论是小型便利店还是大型超市,都少不了使用收益系统,那么常用的店铺收银系统要怎么用呢?店铺收银系统怎么用一款好用的收银系统,是可以起到提升店铺首页效率的,现在信息时代,不少收银系统开…

php字符长度函数漏洞 ctf,CTF中常见php-MD5()函数漏洞

CTF中常见php-MD5()函数漏洞1.数字与字符串之间的比较var_dump( 0 "a" );var_dump( "0" "a" );第一个返回的是 true ,第二个返回的是 false因为php把字母开头的转化为整型时,转化为0, 前面数字后面字母的话就…

spring 2.0核心技术与最佳实践 pdf_推荐 Spring Boot 实践学习案例大全 数据缓存 和中间件 安全权限...

概况spring boot 实践学习案例spring boot 初学者及核心技术巩固的最佳实践目录『 Spring Boot 2 快速教程 』Spring Boot 2:WebFlux集成 ThymeleafSpring Boot 2:WebFlux集成 MongodbSpring Boot 2:WebFluxRestfulCRUD实践Spring Boot 2&…

python进阶-Python 进阶用法 (持续更新)

装饰器(Decorator) Python 的装饰器是任何可调用对象(callable object),用于修改函数(Function)或类(Class)。按照用途可分为: 函数装饰器 类装饰器 装饰器的…

aws php mysql,AWS快速搭建nginx+php+mysql

yum -y install nginxyum -y install php71yum -y install php71-fpm php71-cli php71-common php71-gd php71-devel php71-pdo php71-mysql php71-mbstringyum -y install mysql-server mysql-develnginx php做服务,在高并发的时候会出现一些错误 connect() to…

python中的字典和集合_Python 字典和集合

字典的每个键值对用冒号分割,键值对之间用逗号分隔,所有键值对包括在{}中。d {key1 : value1, key2 : value2 }键必须是唯一的,值可以不唯一。值可以取任何数据类型,但键必须是不可变对象,如字符串,数字或…

centos 8 kubernetes安装详解_8方面图文详解,电气安装工程施工工艺!

八方面图文解读电气安装工艺控制标准1盘、台、开关柜安装2电缆桥架施工3电缆敷设及接线施工4架空线及设备跳线施工5电力变压器安装6电气母线安装7防火封堵施工8成品保护意识一、盘、台、开关柜安装工艺控制标准1.1按设计图纸并根据厂家资料、尺寸误差要求制作盘底座。1.2立盘的…

python与人工智能应用锁_linux应用锁的搜索结果-阿里云开发者社区

Linux中的spinlock和mutexLinux中的spinlock和mutex作者digoal日期2016-11-09标签PostgreSQL , Linux , spin lock , mutex , 自旋锁 , 抢占锁背景最近在压测PostgreSQL同步流复制时,遇到一个mutex锁的瓶颈问题。具体见 《PostgreSQL 同步流复制锁瓶颈分析》PG是以b…

hfss和matlab,hfss和MATLAB联合仿真

hfss中仿真太费时间,而且是在做优化,能否进行hfss和matlab联合仿真,利用模拟退火算法缩短仿真时间?可能我的问题描述的不是特别清楚,我不是想要具体的解决方案,只希望有相关资料的人能提供给小弟一点资料,…

c++代码健壮性_复活Navex-使用图查询进行代码分析(上)

从了解到修复 Navex, 其中花了一年多, 从对自动化代码审计一无所知到学习PL/Static Analysis, 翻阅十几年前的文档, 补全Gremlin Step, 理解AST, CFG, DDG, PDG, CPG, 也感谢z3r0yu师傅和Gaba哥的的交流指导.本文重点在于静态分析 Joern-图查询部分, 后面的动态分析自动生成EXP…

公文字体字号标准2020_一文了解公文格式规范,图文并茂(建议收藏备用)

本方法根据《党政机关公文格式国家标准》(GB/T9704-2012)制定。具体内容如下:一、办公软件要求适用于微软OFFICE—WORD文字处理软件。二、页面设置1.选择“文件”——“页面设置”选择“页边距”附签,上:3.7厘米,下:3.…

360浏览器卸载_无法卸载?Win10 强推新 Edge 浏览器,来教你如何干掉它

8月17日消息,相信不少更新了 Windows 10 v2004 版本的用户都已经发现,系统默认浏览器已经自动更新为基于 Chromium 打造的全新 Edge 浏览器,虽然该浏览器已经一跃成为全球第二大桌面浏览器,但却仍然有不少用户反馈不好用。撰文 | …

python gridsearch_python gridsearch中的内存错误

我需要应用网格搜索我有20000列和110000行的数据帧,我需要使用python的网格搜索模块调整我的参数#validation for svm#there are an error to check it ( grid search ne marche pas i will check why after)label df.Sentimenttrain df.drop(Sentiment, axis1)fro…

磁卡门锁怎么配卡_样式多的铜工艺品怎么设计请查看_江西南昌皇巢|铜门||别墅铜门|...

江西南昌皇巢|铜门||别墅铜门|专注FNbnWz样式多的铜工艺品怎么设计请查看,咨询更多详情!KLC欧式门锁室内门锁卧室房门锁黄古铜门锁实木门锁具执手锁¥,月销笔进店相关推荐词军升欧式门锁黄古铜田园室内门锁执手机械门锁卧室锁具防盗…

php怎么分割页面,用html如何把页面分割成多个文件,由多个文件拼接而成?

用html如何把页面分割成多个文件,由多个文件拼接而成?更新时间:2014-11-10 作者:久久经验网 来源:久久经验网 所属分类:Web前端摘要:静态html分割页面,达到类似php等动态页面的in…

python xml字符串_python -解析字符串,并返回xml格式字符串 急该如何解决

python --解析字符串&#xff0c;并返回xml格式字符串 急急急。str """Registrations:Call-ID: 8945da7a7f550c16NWRjZjdmMjhmNWQxYTZlOTJjMDY5YjhiN2RjMDViMWE.User: 1000192.168.1.111Contact: "1000" <1000>1000&g…

13寸笔记本电脑尺寸_如何判断行李箱的尺寸?标准行李箱尺寸对照表(13~32寸)

行李箱已经成为家庭必备的一件物品&#xff0c;很多时候都会用到行李箱&#xff0c;最晚就是大学时期&#xff0c;肯定会准备一个行李箱&#xff0c;有些人第一次买不知道如何判断行李箱的尺寸&#xff0c;今天小编就教大家怎么自己确定行李箱的尺寸。如何判断行李箱的尺寸?行…