pyhon路径操作
路径操作模块
path.join
拼接路径
path.exists
判断路径是否存在
# os模块常用函数 os.path模块
from os import path
p = path.join('/etc', 'sysconfig', 'network') # 拼接
print(type(p), p)
print(path.exists(p)) # 存在
"""
结果
<class 'str'> /etc\sysconfig\network
False
"""
path.split
对路径进行切割,得出一个路径和基名组成的元组
path.dirname
路径
path.basename
基名
print(path.split(p)) # 分割
print(path.dirname(p), path.basename(p)) # 路径和基名
"""
结果
('/etc\\sysconfig', 'network')
/etc\sysconfig network
"""
path.abspath
输出绝对路径
print(path.abspath(''), path.abspath('.')) # 绝对路径
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码 C:\Users\Administrator\Desktop\学习笔记\Python\代码
"""
path.splitdrive
输出磁盘和路径组成的元组
print(path.splitdrive('o:/temp/test')) # windows方法
"""
结果
('o:', '/temp/test')
"""
#打印父目录
p1 = path.abspath(__file__)
print(p1)
while p1 != path.dirname(p1):
p1 = path.dirname(p1)
print(p1)
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.py
C:\Users\Administrator\Desktop\学习笔记\Python\代码
C:\Users\Administrator\Desktop\学习笔记\Python
C:\Users\Administrator\Desktop\学习笔记
C:\Users\Administrator\Desktop
C:\Users\Administrator
C:\Users
C:\
"""
Path类
from pathlib import Path
p = Path()
#WindowsPath('.')
p = Path('a', 'b', 'c/d')
#a\b\c\d
p = Path('/etc', Path('sysconfig'), 'network/ifcfg')
#\etc\sysconfig\network\ifcfg
路径拼接
操作符/
Path对象 / Path对象
Path对象 / 字符串
字符串 / Path对象
p = Path()
p = p/'a'
p1 = 'b'/p
p2 = Path('c')
p3 = p2 / p1
print(p1, p2, p3)
print(p3.joinpath('d', 'e/f', Path('g/h')))
"""
结果
b\a c c\b\a
c\b\a\d\e\f\g\h
"""
分解
parts
属性,会返回目录各部分的元组
p = Path('/a/b/c/d')
print(p.parts)
"""
结果
('\\', 'a', 'b', 'c', 'd')
"""
获取路径
str 获取路径字符串
bytes 获取路径字符串的bytes
p = Path('/etc')
print(str(p), bytes(p))
"""
结果
\etc b'\\etc'
"""
父目录
parent
目录的逻辑父目录
parents
父目录惰性可迭代对象,索引0是直接的父
from pathlib import Path
a = Path().absolute()
print(a)
print(a.parent)
for i in a.parents:
print(i)
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码
C:\Users\Administrator\Desktop\学习笔记\Python
C:\Users\Administrator\Desktop\学习笔记\Python
C:\Users\Administrator\Desktop\学习笔记
C:\Users\Administrator\Desktop
C:\Users\Administrator
C:\Users
C:\
"""
也可以通过cwd来获取当前父目录
Path.cwd()
Out[21]: WindowsPath('C:/Users/Administrator/Desktop/学习笔记/Python/代码')
print(a.parents[0])
"""
结果
C:/Users/Administrator/Desktop/学习笔记/Python
"""
目录组成部分
name
、stem
、suffix
、suffixes
、with_suffix(suffix)
、with_name(name)
name
目录的最后一个部分
suffix
目录中最后一个部分的扩展名
stem
目录最后一个部分,没有后缀
name = stem + suffix
suffixes
返回多个扩展名列表
with_suffix(suffix)
有扩展名则替换,无则补充扩展名
with_name(name)
替换目录最后一个部分并返回一个新的路径
name
路径的最后一部分
from pathlib import Path
a = Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/test.abc.py.zip')
print(a)
print(a.name)
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.abc.py.zip
test.abc.py.zip
"""
suffix
路径最后一部分的后缀
print(a)
print(a.suffix)
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.abc.py.zip
.zip
"""
stem
路径最后一部分除了后缀部分
print(a)
print(a.stem)
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.abc.py.zip
test.abc.py
"""
name = stem + suffix
print(a)
print(a.stem+a.suffix)
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.abc.py.zip
test.abc.py.zip
"""
suffixes
将路径最后一部分所有的扩展名分解开
print(a)
print(a.suffixes)
"""
结果
C:/Users/Administrator/Desktop/学习笔记/Python/代码/test.abc.py.zip
['.abc', '.py', '.zip']
"""
with_suffix(suffix)
修改扩展名,返回新路径
print(a)
print(a.with_suffix('.pdf'))
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.abc.py.zip
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.abc.py.pdf
"""
with_name(name)
修改路径最后一部分,返回新路径
print(a)
print(a.with_name('haha'))
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\test.abc.py.zip
C:\Users\Administrator\Desktop\学习笔记\Python\代码\haha
"""
全局方法
cwd
() 返回当前工作目录
home
() 返回当前家目录
from pathlib import Path
p = Path('/magedu/mysql/install/mysql.tar.gz')
print(p.cwd(), Path.cwd())
print(p.home(), Path.home())
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码 C:\Users\Administrator\Desktop\学习笔记\Python\代码
C:\Users\Administrator C:\Users\Administrator
"""
当前工作目录和家目录不会随路径对象的变化而变化
判断方法
exists()
目录或文件是否存在
is_dir()
是否是目录,目录存在返回True
is_file()
是否是普通文件,文件存在返回True
is_symlink()
是否是软链接
is_socket()
是否是socket文件
is_block_device()
是否是块设备
is_char_device()
是否是字符设备
is_absolute()
是否是绝对路径
其它操作
rmdir
() 删除空目录。没有提供判断目录为空的方法
touch
(mode=0o666, exist_ok=True) 创建一个文件
as_uri
() 将路径返回成URI,例如'file:///etc/passwd'
mkdir
(mode=0o777, parents=False, exist_ok=False)
parents
,是否创建父目录,True等同于mkdir -p。False时,父目录不存在,则抛出FileNotFoundError
exist_ok
参数,在3.5版本加入。False时,路径存在,抛出FileExistsError;True时,FileExistsError被忽略
iterdir
() 迭代当前目录,不递归
iterdir()
会将文件夹中的所有目录生成一个惰性可遍历对象
from pathlib import Path
p = Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/a')
print(p)
print(list(p.iterdir()))
"""
结果
C:\Users\Administrator\Desktop\学习笔记\Python\代码\a
[]
"""
mkdir
新建文件夹
p = Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/a')
(p/'tset').mkdir()
print(list(p.iterdir()))
"""
结果
[WindowsPath('C:/Users/Administrator/Desktop/学习笔记/Python/代码/a/tset')]
"""
rmdir
删除文件夹
p = Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/a')
(p/'tset').rmdir()
print(list(p.iterdir()))
"""
结果
[]
"""
as_uri
将路径以uri的形式返回
p = Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/a')
print(p.as_uri())
"""
结果
file:///C:/Users/Administrator/Desktop/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/Python/%E4%BB%A3%E7%A0%81/a
"""
touch
创建新文件
p = Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/a')
(p/'tset').touch()
print(list(p.iterdir()))
"""
结果
[WindowsPath('C:/Users/Administrator/Desktop/学习笔记/Python/代码/a/tset')]
"""
通配符
glob(pattern)
通配给定的模式,返回生成器对象
rglob(pattern)
通配给定的模式,递归目录,返回生成器对象
?
代表一个字符
*
表示任意个字符
[abc]
或[a-z]
表示一个字符
list(p.glob('test*')) # 返回当前目录对象下的test开头的文件
list(p.glob('**/*.py')) # 递归所有目录,等同rglob
list(p.glob('**/*'))
g = p.rglob('*.py') # 生成器,递归
next(g)
list(p.rglob('*.???')) # 匹配扩展名为3个字符的文件
list(p1.rglob('[a-z]*.???')) # 匹配字母开头的且扩展名是3个字符的文件
文件操作
Path.open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)
使用方法类似内建函数open。返回一个文件对象
from pathlib import Path
p=Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/1')
print(p.open())
"""
结果
<_io.TextIOWrapper name='C:\\Users\\Administrator\\Desktop\\学习笔记\\Python\\代码\\1' mode='r' encoding='cp936'>
"""
Path.read_bytes()
以'rb'读取路径对应文件,并返回二进制流。看源码
Path.read_text(encoding=None, errors=None)
以'rt'方式读取路径对应文件,返回文本。
Path.write_bytes(data)
以'wb'方式写入数据到路径对应文件。
Path.write_text(data, encoding=None, errors=None)
以'wt'方式写入字符串到路径对应文件
from pathlib import Path
p=Path('C:/Users/Administrator/Desktop/学习笔记/Python/代码/1')
print(p.read_text())
#***123哈哈a
print(p.read_bytes())
#b'***123\xe5\x93\x88\xe5\x93\x88a'
print(p.write_text('123456'))
#6
with p.open() as f:
print(f.read())
#123456
OS模块
命令 | 描述 |
---|---|
os.name |
win是nt,linux是posix |
os.uname() |
*nix支持 |
sys.platform |
windows显示win32,linux显示linux |
os.sep |
显示系统路径分隔符 |
os.getenv(环境变量名称) |
读取环境变量 |
os.getcmd() |
获取当前的路径 |
os.mkdir() |
创建空目录 |
os.rmdir() |
删除空目录,不为空无法删除 |
os.makedirs(dirname) |
生成多层递归目录,如果目录全部存在,则创建失败 |
os.removedirs(dirname) |
删除多层递归的空目录,若有文件则无法删除 |
os.chdir() |
改变当前目录,到指定目录 |
os.rename() |
重命名目录或者文件名,重命名的文件已存在则创建失败 |
os.path.exists(path) |
判断文件或者目录是否存在 |
os.path.isfile(path) |
判断是否为文件 |
os.path.isdir(path) |
判断是否为目录 |
os.path.basename(path) |
返回文件名 |
os.path.dirname(path) |
返回文件路径 |
os.path.getsize(name) |
获取文件大小 |
os.path.abspath(name) |
获取绝对路径 |
os.path.join(path,name) |
链接目录与文件名或者目录 |
os.listdir('o:/temp')
返回指定目录内容列表,不递归
os也有open、read、write等方法,但是太底层,建议使用内建函数open、read、write,使用方式相似
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/16387422.html