python中Path详细用法

python中Path详细用法

1. 基本功能

建议使用pathlib模块来处理文件和文件夹,可以跨平台。pathlib提供path对象来操作,包括目录和文件。

from pathlib import Path

p =Path() #输出格式。PosixPath('.')

p =Path('a','b','c/d') #输出格式PosixPath('a/b/c/d')

p =Path('/etc') #PosixPath('/etc')

2. 路径拼接和分解

使用操作符/进行路径拼接,有两种方式:① Path对象/Path对象;② Path对象/字符串,或者字符串/Path对象;也可以使用joinpath方法。

使用Parts属性进行路径分解,可以返回路径中的每一个部分

p = Path() # 当前目录,PosixPath('.')

p = p/'a' #PosixPath('a')

p1 = 'b'/p #PosixPath('b/a')

p2 = Path('c') #PosixPath('c')

p3 = p2 /p1 #PosixPath('c/b/a')

print(p3.parts) #('c', 'b', 'a')

p3.joinpath('etc','int.d',Path('.httpd')) #PosixPath('c/b/a/etc/int.d/.httpd')

3. 获取路径

Str获取路径字符串。Bytes获取路径字符串的bytes。

p = Path('/etc')

print(str(p),bytes(p))

#/etc b'/etc'

使用parent获取父目录,使用parents获取所有父目录,使用absolute方法获取绝对路径

p = Path('/a/b/c/d')

p.parent.parent # / PosixPath('/a/b')

p.absolute().parents[len(p.absolute().parents)-1] # PosixPath('/')

print(len(p.absolute().parents)) # 4

获取文件路径的方法: (1)name:目录的最后一个部分 (2)suffix:目录中最后一个部分的拓展名 (3)stem:目录最后一个部分,没有后缀。 (4)suffixes 返回多个扩展名列表。 (5)with_suffix(suffix):补充扩展名到路径尾部,返回新的路径,扩展名存在则无效。 (6)with_name(name):替换目录最后一个部分并返回一个新的路径。

p = Path('/etc/config/system/cf.config.gz')

print(p.name) #cf.config.gz

print(p.suffix) #.gz

print(p.suffixes) #['.config', '.gz']

print(p.stem) #cf.config

print(p.with_name('cf.config'))

#/etc/config/system/cf.config

print(p.with_suffix('.txt'))

#/etc/config/system/cf.config.txt

4. 文件操作

open(mode=’r’,buffering=-1,encoding=None,errors=None,newline=None):使用方法类似内建函数open,返回一个文件对象。 read_bytes():以’rb’读取路径相对文件,并返回二进制流。 read_text(encoding=None,errors=None):以’rt’ 方式读取路径对应文件,返回文本。 Path.write_bytes(data):以’wb’方式写入数据到路径对应文件。 write_text(data,encoding=None,errors=None):以’wt’方式写入字符串到路径对应文件。

p = Path('my_binary_file')

p.write_bytes(b'Binary file contents')

p.read_bytes()

#打印出b'Binary file contents'

p = Path('my_text_file')

p.write_text('Text file contents')

p.read_text()

#打印出'Text file contents'

p = Path('test.py')

p.write_text('hello python')

print(p.read_text())

# hello python

with p.open()as f:

print(f.read(5))

# hello

5. 文件夹操作

(1)as_uri()将文件路径返回URI。 (2)mkdir(mode=0o777,parents=False,exist_ok=False) (3)Parents,是否创建父目录,True等同于mkdir-p:False时,父目录不存在,则抛出fileNotfounderror。 (4)exist_ok参数,在3.5版本加入,flase时路径存在,抛出异常,True时候异常被忽略。 (5)Iterdir():迭代当前目录 (6)touch(mode=0o666,exist_ok=True)创建一个文件 (7)cwd():返回当前工作目录 (8)home():返回当前目录 (9)is_dir():是否是目录,目录存在返回True. (10)is_symlink():是否是软连接 (11)is_file():是否是普通文件,文件存在返回True (12)is_socket():是否是socket文件 (13)is_block_device():是否是块设备。 (14)is_char_device():是否是字符设备 (15)is_absolute():是否是绝对路径 (16)resolve():返回一个新的路径,这个新的路径就是当前Path的绝对路径,如果是软连接则直接被解析 (17)absolute()也可以获取绝对路径,但是推荐使用resolve() (18)exists()目录或文件是否存在 (19)rmdir()删除空目录,没有提供判断目录为空的方法。 (20)ls():获取所有文件和文件夹

p = Path()

p.exists() # True

p /='a/b/c/d'

p.exists() # False

p.mkdir() # 报错,创建不成功

p.mkdir(parents=True) # 创建成功

p.exists() # True

p.mkdir(parents=True) # 报错,已经有了,不能再创建

p.mkdir(parents=True,exist_ok=True) # 不报错

p /='readme.txt' # p = PosixPath('a/b/c/d/readme.txt')

p.parent.rmdir() # 只剩下PosixPath('a/b/c')

p.parent.exists() # False

p.mkdir() # 报错,不存在文件

p.mkdir(parents=True) # 成功

for x in p.parents[len(p.parents)-1].iterdir():

print(x,end='\t')

if x.is_dir():

flag = False

for _ in x.iterdir():

flag = True

break

print('dir','Not Empty' if flag else 'Empyt',sep='\t')

elif x.is_file():

print('file')

else:

print('other file')

6. 通配操作

glob(pattern):通配给定的模式。 rglob(pattern):通配给定的模式,递归目录,返回一个生成器。

list(p.glob('test*')) #返回当前目录对象下的test开头的文件

list(p.glob('**/*.py'))#递归所有目录,等同于rglob,会比较费时

g = p.rglob('*.py') #生成器

next(g)

match(pattern):返回True或False的通配函数。

Path('a/b.py').match('*.py') #True

Path('/a/b/c.py').match('b/*.py')#True

Path('/a/b/c.py').match('a/*.py') #False 因为a文件下找不到.Py文件

Path('/a/b/c.py').match('a/*/*.py')#True

Path('/a/b/c.py').math('a/**/*.py')#True

Path('/a/b/c.py').math('**/*.py')#True

相关推荐

如何做银行固定报表开发
beat365体育亚洲

如何做银行固定报表开发

📅 10-09 👁️ 8962
世界奇妙物语
beat365体育亚洲

世界奇妙物语

📅 06-27 👁️ 2793
从《三国志》里可以看出关羽实力和战绩有多高?堪称最高一档
首批AKG使用者带来的健康革命:科学证据与选择指南,gnakg是骗局么?副作用和危害?为什么原则GeneAKG!
江南百景图顾大娘的大母鸡位置详解
beat365体育亚洲

江南百景图顾大娘的大母鸡位置详解

📅 07-14 👁️ 8374
曼蒂克照片纸怎么样,曼蒂克mandik品牌在照片纸行业排名