1.os.path(py3.4之前)
from os import path
p = path.join('/etc','sysconfig','network') #path.join 拼接。。只能第一个最前位置带/
p
'/etc/sysconfig/network'
print(type(p),p,'\n') #p 是一个字符串
print(path.exists(p)) #判断文件是否存在
print(path.dirname(p)) #路径的dirname
print(path.basename(p)) #路径的基名
print(path.split(p)) #分割dirname 和 basename
print(path.abspath('network')) #取文件的绝对路径,/jupyter/draft/network 并不存在
<class 'str'> /etc/sysconfig/network
True
/etc/sysconfig
network
('/etc/sysconfig', 'network')
/jupyter/draft/network
2. pathlib.Path(py3.4之后)
from pathlib import Path
1.生成一个路径
print('1:',Path()) #取当前路径
print('2:',Path('a','b','c/d')) #字符合成
print('3:',Path('/etc')) #直接写入绝对路径
1: .
2: a/b/c/d
3: /etc
2. 路径的拼接和分解
/ 拼接:
p / 'str' 或者 'str' / p
p = Path('a','b','f/z')
print(p)
p2 = p / 'new_str'
print(p2)
p3 = '/new_str' / p
print(p3)
p4 = p3 / p
print(p4)
a/b/f/z
a/b/f/z/new_str
/new_str/a/b/f/z
/new_str/a/b/f/z/a/b/f/z
joinpath 拼接
p3.joinpath('etc','ab',Path('http')) # 等效于 p3.joinpath('etc','ab','http')
PosixPath('/new_str/a/b/f/z/etc/ab/http')
路径分割: parts方法
print(p4.parts)
('/', 'new_str', 'a', 'b', 'f', 'z', 'a', 'b', 'f', 'z')
3 获取路径
- 获取字符串路径,str
- 获取bytes路径,bytes
p = Path('/etc')
print(str(p),'\n',bytes(p))
/etc
b'/etc'
获取目录:
获取父目录:
parent
parents
p4 = Path('/new_str/a/b/f/z/a/b/f/z')
print(p4.parent)
print(p4.parents)
for x in p4.parents:
print(x)
/new_str/a/b/f/z/a/b/f
<PosixPath.parents>
/new_str/a/b/f/z/a/b/f
/new_str/a/b/f/z/a/b
/new_str/a/b/f/z/a
/new_str/a/b/f/z
/new_str/a/b/f
/new_str/a/b
/new_str/a
/new_str
/
其他相关1:
p = Path('/a/b/c/d/g.tar.gz.a')
print(p.name) #取basename
print(p.suffix) #取目录最后一部分的扩展名,最后一个小数点部分。包括小数点。
print(p.suffixes) #取从左到右第一个小数点右侧的部分,小数点分割。每部分都带小数点。
print(p.stem) #取basename 排除最后一个小数点部分
print(p.with_name('233.tgz')) #补仓后缀
print(p.with_suffix('.txt')) #补后缀
g.tar.gz.a
.a
['.tar', '.gz', '.a']
g.tar.gz
/a/b/c/d/233.tgz
/a/b/c/d/g.tar.gz.txt
其他相关2:
p = Path('../tmp/')
print(p.cwd()) #获取当前所在目录
print(p.home()) #获取当前用户的家目录
print(p.is_dir()) #判断是否为目录
print(p.is_file())#判断是否为文件
print(p.is_symlink()) #判断是否为软连接
print(p.is_socket()) #判断是否为socket 文件
print(p.is_block_device()) #判断是否为块设备
print(p.is_char_device()) #判断是否为字符设备
print(p.is_absolute()) #判断是否为绝对路径
print(p.resolve()) #返回绝对路径,推荐使用
print(p.absolute()) #返回绝对路径
print(p.exists()) #判断文件或者目录是否存在
/jupyter/draft
/root
True
False
False
False
False
False
False
/jupyter/tmp
/jupyter/draft/../tmp
True
其他相关3:
p5 = Path('/b/b/c')
p5.as_uri() #返回文件的uri
#说明:不能使用相对路径。。
'file:///b/b/c'
4. 创建目录或者文件
from pathlib import Path
p6 = Path('../tmp/123')
p6.mkdir(exist_ok = True)
#mkdir(mode=0o777,parents=False,exist_ok = False)
#parents 是否创建父目录,递归创建
#exist_ok = True 忽略文件存在的异常,默认是不忽略。
p7 = Path('../tmp/123/hello.txt')
p7.touch()
#touch(mode=0o666,exist_ok = True)
5. 相关操作
路径相关操作:
#设置路径变量
p1 =Path('/jupyter/tmp/a/b')
p2 =Path('/jupyter/tmp/a/b/3.txt')
# 创建文件
p1.mkdir(parents= True,exist_ok= True)
p2.touch()
# 检测文件是否创建成功
print(p2.exists())
#在a/b下创建新文件
p1 /= 'readme.txt'
p1.touch()
print(p1)
print(p1.exists())
True
/jupyter/tmp/a/b/readme.txt
True
3. 文件操作
p.open(mode='r',buffering=-1,encoding=None,errors=None,newline=None)
返回一个文件对象。
p.read_bytes() 以rb读取路径对应的文件,并返回二进制流;
p.read_text(encoding=None,errors=None) rt
p.write_bytes(data) 以wb 方式写入数据到路径对应的文件
p.write_text(data,encoding=None,errors=None) wt
from pathlib import Path
p = Path('../tmp/test.py')
p.write_text('i am mykernel')
print(p.read_text())
with p.open() as f:
print(f.read(5))
i am mykernel
i am
更多欢迎访问:http://www.mykernel.cn/