Python学习week7-文件路径操作

1、os.path模块

# os.path常用方法

from os import path
p=path.join('/etc','sysconfig','network')  # 路径拼接
print(type(p),p)
print(path.exists(p)) # 判断路径是否存在

print(path.split(p)) #  将路径切割为2部分,head,tail

print(path.abspath('.')) # 当前路径的绝对路径

p=path.join('o:/',p,'test.txt')
print(p)  # o:/etcsysconfig
etwork	est.txt
print(path.dirname(p)) # o:/etcsysconfig
etwork
print(path.basename(p)) # test.txt

p1=path.abspath(__file__)
while p1 != path.dirname(p1):
    p1=path.dirname(p1)
    print(p1,path.basename(p1))
    
'''
运行结果:
F:study-pythoncom.lx.studyweek7 week7
F:study-pythoncom.lx.study com.lx.study
F:study-python study-python
F: 
'''

2、pathlib模块

# python3.4版本引入pathlib模块,提供Path对象来操作,包括目录和文件;

# 模块导入: from pathlib import Path

2.1、目录操作

2.1.1、初始化

# 初始化操作:

p=Path() # 创建当前目录对象 ==> “.”

p=Path('a','b','c/d') # 当前目录下的a/b/c/d 对象 ==> a/b/c/d

p=Path('/etc') # 根下/etc目录对象 ==> /ect

2.1.2、路径的拼接与分解

(1) 拼接操作符:/

  # 操作方法:

    Path对象 / Path对象;

    Path对象 / 字符串  或者  字符串/Path对象;

  # 拼接出来的一定是一个Path对象

(2)分解

  # Path对象的parts属性,以元祖的形式返回Path对象中的每一个部分;

p=Path('/etc') # 根下/etc目录对象

p=p / 'a' /'c'  # Path 对象拼接

print(p) # ==> etcac

print(p.parts) # ('\', 'etc', 'a', 'c')

(3)joinpath

  # joinpath(*other) 连接多个字符串到Path对象中,返回一个新的路径对象

p = Path()
print((p/'a').absolute()) # F:study-pythoncom.lx.studyweek7a

p1=p/'a'
print(p1.absolute())

p = p / 'a'  # a
print(0,p.absolute())
print(1,p)
p1 = 'b' / p # b/a
print(2,p1)
p2 = Path('c') # c
print(3,p2)
p3= p2 /p1 # c / b /a
print(4,p3)

print(p3.parts)
pt=p3.joinpath('etc','init.d',Path('httpd'))

print(5,p3) # p3 ==> ca
print(6,pt) # pt ==> caetcinit.dhttpd

2.1.3、获取路径

# str方法可以将Path对象转换为字符串对象,bytes获取路径字符串的bytes;

p=Path('/etc')
print(str(p)) # etc
print(bytes(p)) #  b'\etc'

2.1.4、父目录

# p.parent:表示p对象的父目录,p.parents:为整个目录对象的存储元祖

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

print(p.parent) # ==> ac
print(p.parent.parent) # ==> a

print(p.parts) # 父目录元祖 ('a', 'b', 'c', 'd')

for x in p.parts:
    print(x)
'''
a
b
c
d
'''

2.1.5、目录组成部分

# 目录的组成:name、stem、suffix、suffixes、with_suffix(suffix)、with_name(name)

①:name 目录的最后一部分;

②:suffix 目录中最后一个部分的扩展名;

③:stem 目录最后一个部分,没有后缀;

④:suffixes 返回对个扩展名列表;

⑤:with_suffix(suffix) 有扩展名则替换,无则补充扩展名;

⑥:with_name(name) 替换目录最后一部分并返回一个新的路径;

p=Path('/etc/mysqlinstall/mysql.tar.gz')

print(p.name) # ==>mysql.tar.gz
print(p.suffix) # ==> .gz
print(p.suffixes) # ==> '.tar', '.gz']
print(p.stem) # mysql.tar

print(p.with_name('mysql-5.tgz')) # ==> etcmysqlinstallmysql-5.tgz

print(p.with_suffix('.png')) # ==> etcmysqlinstallmysql.tar.png

p=Path('README.py') # ==> README.py
print(p.with_suffix('.txt')) # ==> README.txt

2.1.6、其他用法

'''
全局方法:
cwd()  返回当前工作目录
home() 返回当前家目录

判断方法:
is_dir() 判断是否为目录
is_file() 判断是否为文件
is_symlink() 判断是否为软链接
is_socket() # 判断是否为socket连接
is_block_device() # 是否为块设备
is_char_device()  # 是否为字符设备
is_absolute() # 是否为绝对路径
resolve()  # 返回一个新路径,这个路径就是挡墙Path对象的绝对路径,如果是软链接则直接解析;
absolute() # 获取绝对路径
exists() # 目录或文件是否存在
rmdir() # 删除空目录,没有提供判断是否为空目录的方法;
touch(mode=0o666,exist_ok=True) # 创建一个文件
as_uri() 将路径返回成URI,例如:file:///etc/passwd
p=Path('a.txt')
url=p.absolute().as_uri()
print(url)
==> file:///F:/study-python/com.lx.study/week7/a.txt
mkdir(mode=0o777,parents=False,exist_ok=False) # parents,是否创建父目录,True等同于mkdir -p; False时,父目录不存在,则抛出FileNotFountError # exist_ok参数,False时,路径已经存在则抛出FileExistsError;True则异常被忽略; ''' p=Path('a.txt') p.touch() p1=Path('a/b/c') print(p1.absolute()) p1.mkdir(mode=0o777,parents=True,exist_ok=False) # ==> 在当前目录下创建了a/b/c目录

# iterdir() 迭代当前目录:

p=Path(r'F:study-pythoncom.lx.studyweek7')

list=[i for i in p.iterdir()]

for i in list:
    print(i)

'''
F:study-pythoncom.lx.studyweek7a
F:study-pythoncom.lx.studyweek7a.txt
F:study-pythoncom.lx.studyweek7	7file.py
'''

# 通配符

  glob(pattern)  通配给定的模式;

  rglob(pattern) 通配给定的模式,递归目录;

print(list(p.glob('*.py'))) # 返回当前目录对象下以py结尾的文件
'''
==>[WindowsPath('F:/study-python/com.lx.study/week7/t7file.py')]
'''

g=p.rglob('*.txt') # 递归查找txt结尾的文件的生成器对象

for i in g:
    print(i)

'''
F:study-pythoncom.lx.studyweek7a.txt
F:study-pythoncom.lx.studyweek7acd
eadme.txt

# 匹配 match(pattern)

模式匹配,成功返回True

# stat() 相当于linuxstat命令;

2.2、文件操作

# open(self, mode='r', buffering=-1, encoding=None,errors=None, newline=None):

使用方法类似内建函数open,返回一个文件对象:

p=Path(r'F:study-pythoncom.lx.studyweek7a.txt')

print(p.match('*.txt'))

with p.open(encoding='utf-8') as f:
    print(f.readline())

# read_bytes() 以rb模式读取文件,并返回bytes类型

# Path.write_bytes(data) 以wb模式写入数据到文件

# read_text(encoding=None,errors=None) 以rt模式读取文件,返回文本;

# write_text(data,encoding=None,errors=None) 以wt模式写入字符串到文件;

原文地址:https://www.cnblogs.com/soulgou123/p/9818779.html