python的路径操作

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 获取路径

  1. 获取字符串路径,str

  2. 获取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 

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

 

4. 总结

 

img

—————- 谢谢光临 —————-

赞 (0)