Python中路径操作

<div class="toc">
<p class="toc-title">目录


<div class="toc-list">

3.4版本之前使用os.path模块,3.4版本之后建议使用pathlib模块

方法 解释 绝对路径 >>> from os import path >>> p = path.join('/usr','local/httpd/httpd.conf') >>> p '/usr/local/httpd/httpd.conf' >>> type(p) >>> path.dirname(p) '/usr/local/httpd' >>> path.basename(p) 'httpd.conf' >>> path.split(p) ('/usr/local/httpd','httpd.conf')

p
'/etc/local/http/httpd.conf'
while p != path.dirname(p):
... p = path.dirname(p)
... print(p,path.basename(p))
...
/etc/local/http http
/etc/local local
/etc etc
/

<h2 id="pathlib模块">2. pathlib模块

from pathlib import Path
Path中返回的是一个Path对象,而os.path中返回的是一个字符串。

初始化:

>>> p = Path() # 当前目录
p = Path('a','b','c/d') # 当前目录下的a/b/c/d
p = Path('/etc') # 根下的etc目录
属性 解释 >>> p = Path('/usr/local/httpd/httpd.conf') p.name 'httpd.conf' p.stem 'httpd' p.suffix '.conf' p.with_name('httpd.txt') PosixPath('/usr/local/httpd/httpd.txt') 属性 解释 文件链接文件绝对路径绝对路径,如果是软连接则被解析获取绝对路径,推荐使用resolve()文件是否存在删除空目录,没有提供判断目录为空的方法文件 判断目录:

>>> Path.cwd()
PosixPath('/home/yanfa')
Path.home()
PosixPath('/home/yanfa')
p = Path('/home/yanfa')
p
PosixPath('/home/yanfa')
p.is_dir()
True
p.is_file()
False
p.is_absolute()
True

创建目录:

>>> p = Path()
p /= 'a/b/c/d'
p.exists()
False
p.mkdir() # FileNotFoundError
Traceback (most recent call last):
File "",line 1,in 
File "/usr/local/python3.6/lib/python3.6/pathlib.py",line 1248,in mkdir
self._accessor.mkdir(self,mode)
File "/usr/local/python3.6/lib/python3.6/pathlib.py",line 387,in wrapped
return strfunc(str(pathobj),*args)
FileNotFoundError: [Errno 2] No such file or directory: 'a/b/c/d'
p.mkdir(parents=True)
p.exists()
True

通配符匹配:

  • glob(pattern) 匹配给定的模式
  • rglob(pattern) 匹配给定的模式,递归目录,返回一个生成
  • match(pattern) 模式匹配,成功返回True
>>> p = Path()
list(p.glob('h*'))
[PosixPath('h'),PosixPath('hello')]
list(p.glob('**/*.py'))
[PosixPath('pass_py.py')]
g = p.rglob('*.py')
next(g)
PosixPath('pass_py.py')
next(g)
Traceback (most recent call last):
File "",in 
StopIteration
p = Path('a/b/c/d')
p = Path('a/b/c/ddd.py')
p.match('d*.py')
True
p.match('c/d*.py')
True
p.match('b/*/d*.py')
True

查看文件或者目录属性信息

  • stat() 如同linux里面的stat命令
  • lstst() 同stat(),但是如果是符号链接,就显示链接本身的信息

文件操作">2.2 文件操作

  • open(mode='r',buffering=-1,encoding=None,errors=None,newline=None如何内建的open,返回一个文件对象。
  • read_bytes() 以'rb'读取路径中对应的文件,并返回二进制流。
  • read_text() 以'rt'读取路径中对应的文件,并返回文本。
  • write_bytes(date) 以‘wb’方式写入数据到路径对应文件
  • write_text(data) 以‘wt’方式写入数据到路径对应的文件
>>> from pathlib import Path
p = Path('hello')
p.write_text('hello python')
12
p.read_text()
'hello python'
with p.open() as f:
...      print(f.read())
... 
hello python

  • os.name 返回操作系统
  • os.uname() 显示当前操作系统的详细信息
  • sys.platform 返回当前操作系统
  • os.listdir() 返回目录内容的列表
  • os.stat() 如何stat
  • os.chmod() 修改文件的权限
  • os.chown() 改变文件的属主,属组

shutil模块提供了对文件的高级操作,特别是针对文件的复制和移动。

  • copyfileobj(fsrc,fdst[,length]) 文件对象的复制,复制内容
  • copyfile(src,dst,*,follow_symlinks=True) 复制文件内容,不含元数据
  • copymode() 仅仅复制权限
  • copystat() 复制元数据,stat包含权限
  • copy() 复制文件内容、权限和部分元数据,不包括创建时间和修改时间
  • rmtree() 递归删除,同rm -rf一样
  • move(src,copy_function=copy2) 递归移动文件,目录到目录路径。

相关文章

在这篇文章中,我们深入学习了XPath作为一种常见的网络爬虫技巧。XPath是一种用于定位和选择XML文档中特...
祝福大家龙年快乐!愿你们的生活像龙一样充满力量和勇气,愿你们在新的一年里,追逐梦想,勇往直前,不...
今天在爬虫实战中,除了正常爬取网页数据外,我们还添加了一个下载功能,主要任务是爬取小说并将其下载...
完美收官,本文是爬虫实战的最后一章了,所以尽管本文着重呈现爬虫实战,但其中有一大部分内容专注于数...
JSON是一种流行的数据传输格式,Python中有多种处理JSON的方式。官方的json库是最常用的,它提供了简单...
独立样本T检验适用于比较两组独立样本的均值差异,而配对T检验则适用于比较同一组样本在不同条件下的均...