2020-11-08
python学习
00
请注意,本文编写于 1201 天前,最后修改于 1201 天前,其中某些信息可能已经过时。

目录

1.os.path(py3.4之前)
2. pathlib.Path(py3.4之后)
1.生成一个路径
2. 路径的拼接和分解
3 获取路径
4. 创建目录或者文件
5. 相关操作
3. 文件操作
4. 总结

1.os.path(py3.4之前)

python
from os import path p = path.join('/etc','sysconfig','network') #path.join 拼接。。只能第一个最前位置带/ p
'/etc/sysconfig/network'
python
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之后)

python
from pathlib import Path

1.生成一个路径

python
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

python
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 拼接

python
p3.joinpath('etc','ab',Path('http')) # 等效于 p3.joinpath('etc','ab','http')
PosixPath('/new_str/a/b/f/z/etc/ab/http')

路径分割: parts方法

python
print(p4.parts)
('/', 'new_str', 'a', 'b', 'f', 'z', 'a', 'b', 'f', 'z')

3 获取路径

  1. 获取字符串路径,str
  2. 获取bytes路径,bytes
python
p = Path('/etc') print(str(p),'\n',bytes(p))
/etc b'/etc'

获取目录: 获取父目录: parent parents

python
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:

python
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:

python
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:

python
p5 = Path('/b/b/c') p5.as_uri() #返回文件的uri #说明:不能使用相对路径。。
'file:///b/b/c'

4. 创建目录或者文件

python
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. 相关操作

路径相关操作:

python
#设置路径变量 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

python
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

路径相关操作2: 遍历并判断文件的类型,如果是目录,判断其是否为空。

4. 总结

本文作者:mykernel

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!