能用二级域名做网站吗,wordpress问答插件中文免费版,内蒙古呼和浩特天气预报,光谷做网站推广公司文件路径模块pathlib 文章目录文件路径模块pathlib1.概述2.创建路径2.1.创建非windos平台路径2.2.动态拼接路径joinpath2.3.替换文件名称 with_name2.4.创建固定目录2.5.创建文件夹和文件1.创建多级目录mkdir2.创建空文件3.路径解析3.1.根据路径分隔符解析路径parts3.2.获取父级…文件路径模块pathlib 文章目录文件路径模块pathlib1.概述2.创建路径2.1.创建非windos平台路径2.2.动态拼接路径joinpath2.3.替换文件名称 with_name2.4.创建固定目录2.5.创建文件夹和文件1.创建多级目录mkdir2.创建空文件3.路径解析3.1.根据路径分隔符解析路径parts3.2.获取父级目录parent3.3.获取路径最后一个部分name4.目录内容4.1.访问路径下所有文件iterdir4.2.正则匹配文件glob5.读写文件6.文件类型7.文件属性7.1.stat获取文件属性7.2.stat判断文件属性方法8.权限9.删除9.1.删除空目录9.2.删除目录文件1.概述
前面介绍的os.path模块操作文件路径是基于字符串的底层操作这篇文章介绍的pathlib模块也是处理文件路径但是它比os.path模块操作更加方便。 pathlib模块提供了一个面向对象API接口来 解析、创建、测试和处理文件和路径。
2.创建路径
2.1.创建非windos平台路径
PurePath代表并不访问实际文件系统的“纯路径”只负责对路径字符串执行操作不会在磁盘上创建路径及文件。PurePath有两个子类即PurePosixPath和PathWindowsPath分别代表UNIX风格的路径和Windows风格的路径。 Path代表访问实际文件系统的“真正路径”。Path对象可用于判断对应的文件是否存在、是否为文件、是否为目录等。有两个子类即PosixPath和WindowsPath。
import pathlib# PurePosixPath非windows平台创建一个路径对象
usr pathlib.PurePosixPath(/usr)
print(usr)# 拼接路径
usr_local usr / local
print(usr_local)usr_share usr / pathlib.PurePosixPath(share)
print(usr_share)root usr / ..
print(root)etc root / /etc/
print(etc)运行结果
/usr
/usr/local
/usr/share
/usr/..
/etc
2.2.动态拼接路径joinpath
如果创建的路径是未知的可以将各个路径作为参数使用joinpath拼接。
import pathlibroot pathlib.PurePosixPath(/)
subdirs [usr, local]
usr_local root.joinpath(*subdirs)
print(usr_local)运行结果
/usr/local2.3.替换文件名称 with_name
当给定一个包含文件的路径时我们想替换这个路径的文件名称如果使用分隔符操作虽然可以获取到文件名称进行替换但是操作有些复杂这里提供了一个函数能够直接替换文件名称他们都是返回新对象原对象保持不变。
with_name函数用来替换路径中文件名with_suffix函数修改文件后缀
import pathlibind pathlib.PurePosixPath(source/pathlib/index.rst)
print(ind)
# 替换文件名称
py ind.with_name(pathlib_from_existing.py)
print(py)# 替换文件后缀
pyc py.with_suffix(.pyc)
print(pyc)运行结果
source/pathlib/index.rst
source/pathlib/pathlib_from_existing.py
source/pathlib/pathlib_from_existing.pyc
2.4.创建固定目录
当我们创建目录时候可以指定一个固定目录然后在目录后拼接路径。省去了每次都要写一个绝对路径path类为我们提供了常用的方法例如home方法获取当前系统的家目录cwd方法获取当前工作目录。
import pathlibhome pathlib.Path.home()
print(home: , home)cwd pathlib.Path.cwd()
print(cwd : , cwd)运行结果
home: /Users/edy
cwd : /Users/edy/my_pathlib
2.5.创建文件夹和文件
1.创建多级目录mkdir
mkdir方法可以用来创建多级目录
parents True: 创建中间级父目录exist_ok True: 目标目录存在时不报错
import pathlibp pathlib.PurePosixPath(dir/abd)
pathlib.Path(p).mkdir(parentsTrue, exist_okTrue)
print(p)2.创建空文件
touch方法用来创建一个空文件前提是文件创建的路径必须存在路径不存在则会报错。
from pathlib import Pathmyfile Path(dir/myfile.txt)
myfile.touch(exist_okTrue)3.路径解析
3.1.根据路径分隔符解析路径parts
parts属性可以生成根据路径分隔符解析得到的一个路径段序列返回是一个元组反应了路径实例的不可变性。
import pathlibp pathlib.PurePosixPath(/usr/local/lib)
print(p.parts)运行结果
(/, usr, local, lib)3.2.获取父级目录parent
获取父级目录有两个属性 parent属性获取一次path路径的父级路径 parents属性返回一个迭代器他可以不断的获取上级目录直到文件系统的根目录。
import pathlibp pathlib.PurePosixPath(/usr/local/lib)
# 获取父级目录
print(parent: {}.format(p.parent))print(\nhierarchy:)
# 迭代获取父级目录直到系统文件根路径
for up in p.parents:print(up)运行结果
parent: /usr/localhierarchy:
/usr/local
/usr
/3.3.获取路径最后一个部分name
name属性获取路径的最后一个部分与os.path.basename函数生成的值相同。 suffix属性获取文件扩展名 stem属性获取不含后缀的文件名
import pathlibp pathlib.PurePosixPath(./source/pathlib/pathlib_name.py)
print(path : {}.format(p))
# 获取文件名称
print(name : {}.format(p.name))
# 获取文件后缀
print(suffix: {}.format(p.suffix))
# 获取文件名称不包含后缀
print(stem : {}.format(p.stem))运行结果
path : source/pathlib/pathlib_name.py
name : pathlib_name.py
suffix: .py
stem : pathlib_name
4.目录内容
path类提供了一些方法用来访问目录列表和发现文件系统中的文件名。
4.1.访问路径下所有文件iterdir
iterdir方法是一个生成器会返回指定目录中所有内容。如果path不指定一个目录则iterdir() 抛出 NotADirectoryError
import pathlibp pathlib.Path(.)# 返回指定路径下所有的文件
for f in p.iterdir():print(f)4.2.正则匹配文件glob
glob方法根据正则表达式匹配符合条件的文件
import pathlibp pathlib.Path(.)# 匹配当前路径下my开头py后缀的文件
for f in p.glob(my_*.py):print(f)运行结果
my_parsing_path.py
my_dir_path.pyrglob方法可以递归遍历文件
import pathlibp pathlib.Path(..)for f in p.rglob(pathlib_*.py):print(f)5.读写文件
Path实例包含一些方法读写文件内容例如read_bytes() or read_text()读取文件内容 use write_bytes() or write_text()写入文件。可以使用open方法打开文件并保留句柄操作文件。
import pathlib# 当前路径下创建文件
f pathlib.Path(example.txt)f.write_bytes(This is the content.encode(utf-8))with f.open(r, encodingutf-8) as handle:print(read from open(): {!r}.format(handle.read()))print(read_text(): {!r}.format(f.read_text(utf-8)))运行结果
read from open(): This is the content
read_text(): This is the content6.文件类型
Path类包含了一些方法判断文件的类型。
is_file()判断是不是文件类型is_dir()判断是不是目录类型is_symlink()判断是不是软链接类型is_fifo()判断是不是队列is_block_device()判断是不是块设备is_char_device()判断是不是字符设备
7.文件属性
7.1.stat获取文件属性
stat()方法和lstat()方法获取文件属性lstat方法用来检查可能是软连接的目标状态。这两个方法返回的结果与os.stat和os.lstat方法相同。
import pathlib
import sys
import timeif len(sys.argv) 1:filename __file__
else:filename sys.argv[1]p pathlib.Path(filename)
stat_info p.stat()# 文件的绝对路径
print({}:.format(filename))
# 文件大小
print( Size:, stat_info.st_size)
# 文件权限
print( Permissions:, oct(stat_info.st_mode))
# 文件所有者
print( Owner:, stat_info.st_uid)
# 文件所在块设备
print( Device:, stat_info.st_dev)
# 文件创建时间
print( Created :, time.ctime(stat_info.st_ctime))
# 文件最后修改时间
print( Last modified:, time.ctime(stat_info.st_mtime))
# 文件最后方法时间
print( Last accessed:, time.ctime(stat_info.st_atime))运行结果
/Users/edy/file_propert.py:Size: 632Permissions: 0o100644Owner: 501Device: 16777220Created : Mon Feb 13 17:26:24 2023Last modified: Mon Feb 13 17:26:24 2023Last accessed: Mon Feb 13 17:26:24 2023
owner()和group()单独获取文件所有者个分组信息
import pathlibp pathlib.Path(__file__)print({} is owned by {}/{}.format(p, p.owner(), p.group()))运行结果
/Users/edy/file_propert.py is owned by edy/staff7.2.stat判断文件属性方法
import os
import pathlib
import statroot pathlib.Path(test_files)
mode os.stat(root).st_mode
# 判断文件是否存在.
if root.exists():for f in root.iterdir():f.unlink()
else:root.mkdir()if stat.S_ISREG(mode): # 判断是否一般文件print(Regular file.)
elif stat.S_ISLNK(mode): # 判断是否链接文件print(Shortcut.)
elif stat.S_ISSOCK(mode): # 判断是否套接字文件print(Socket.)
elif stat.S_ISFIFO(mode): # 判断是否命名管道print(Named pipe.)
elif stat.S_ISBLK(mode): # 判断是否块设备print(Block special device.)
elif stat.S_ISCHR(mode): # 判断是否字符设置print(Character special device.)elif stat.S_ISDIR(mode): # 判断是否目录print(directory.)##额外的两个函数
stat.S_IMODE(mode) # 返回文件权限的chmod格式
print(chmod format.)stat.S_IFMT(mode) # 返回文件的类型
print(type of fiel.)
8.权限
stat除了获取文件权限还支持设置文件权限。 下面是设置文件权限的属性列表。
stat.S_ISUID: Set user ID on execution. 不常用 stat.S_ISGID: Set group ID on execution. 不常用 stat.S_ENFMT: Record locking enforced. 不常用 stat.S_ISVTX: Save text image after execution. 在执行之后保存文字和图片 stat.S_IREAD: Read by owner. 对于拥有者读的权限 stat.S_IWRITE: Write by owner. 对于拥有者写的权限 stat.S_IEXEC: Execute by owner. 对于拥有者执行的权限 stat.S_IRWXU: Read, write, and execute by owner. 对于拥有者读写执行的权限 stat.S_IRUSR: Read by owner. 对于拥有者读的权限 stat.S_IWUSR: Write by owner. 对于拥有者写的权限 stat.S_IXUSR: Execute by owner. 对于拥有者执行的权限 stat.S_IRWXG: Read, write, and execute by group. 对于同组的人读写执行的权限 stat.S_IRGRP: Read by group. 对于同组读的权限 stat.S_IWGRP: Write by group. 对于同组写的权限 stat.S_IXGRP: Execute by group. 对于同组执行的权限 stat.S_IRWXO: Read, write, and execute by others. 对于其他组读写执行的权限 stat.S_IROTH: Read by others. 对于其他组读的权限 stat.S_IWOTH: Write by others. 对于其他组写的权限 stat.S_IXOTH: Execute by others. 对于其他组执行的权限
下面通过一个例子演示为文件设置权限
import stat
import pathlib
f pathlib.Path(pathlib_chmod_example.txt)
if f.exists():f.unlink()
f.write_text(contents)
# stat.S_IMODE转为chmod模式参数是获取当前文件的权限
existing_permissions stat.S_IMODE(f.stat().st_mode)
print(文件原始权限: {:o}.format(existing_permissions))new_permissions stat.S_IRUSR
# 设置文件新的权限
f.chmod(new_permissions)
# 转换成chmod模式输出
after_permissions stat.S_IMODE(f.stat().st_mode)
print(After: {:o}.format(after_permissions))运行结果
文件原始权限: 644
修改后的权限: 4009.删除
9.1.删除空目录
删除一个空目录可以使用rmdir如果删除一个不为空的目录会报错。删除的目录不存在也会报错。
import pathlibp pathlib.Path(example_dir)print(Removing {}.format(p))
p.rmdir()9.2.删除目录文件
对于文件、符号链接、路径可以使用unlink()删除
import pathlibp pathlib.Path(touched)p.touch()print(exists before removing:, p.exists())p.unlink()运行结果
exists before removing: True
exists after removing: False