Python文件路径名的操作方法


Posted in Python onOctober 30, 2019

1 文件路径名操作

对于文件路径名的操作在编程中是必不可少的,比如说,有时候要列举一个路径下的文件,那么首先就要获取一个路径,再就是路径名的一个拼接问题,通过字符串的拼接就可以得到一个路径名。Python中3.4版本前使用os.path模块中的函数来操作路径名;3.4版本开始提供pathlib模块,使用Path对象来对目录和文件进行操作。

2 os.path模块

from os import path
p = path.join('/etc', 'sysconfig', 'network')  # 根据不同的系统,将每个字符串组合成路径形式
print(type(p), p)
print(path.exists(p))  # 判断路径在当前系统中是否存在
print(path.split(p))  # (head, tail)将路径中的最后一个目录或者文件与前面的路径分开
print(path.abspath('.'))  # 返回当前工作路径,'.'代表当前路径
p = path.join('o:/', p, 'test.txt')
print(path.dirname(p))  # 取目录名
print(path.basename(p))  # 取基名
print(path.splitdrive(p))  # 将盘符名和文件路径名分开(对于windows有盘符之分,在Linux中没有盘符)
p1 = path.abspath(__file__)  # 取当前文件所在的路径
print(p1, path.basename(p1))
while p1 != path.dirname(p1):  # 每次取上级目录中的基名
  p1 = path.dirname(p1)
  print(p1, path.basename(p1))

3 pathlib模块

3.1 目录操作

3.1.1 路径拼接和分解

操作符"/"对路径拼接

“/”操作符可以对两个Path对象进行拼接、字符串和Path对象或者Path对象和字符串进行拼接

parts属性

parts属性,可以返回路径中的每一个部分

joinpath

joinpath(*other)连接多个字符串到Path对象中

from pathlib import Path
p = Path()  # 返回当前目录
p = Path('a', 'b', 'c/d')  # 当前目录下的a/b/c/d
p = Path('/etc')  # 返回根下的etc目录
p = Path()
p = p / 'a'
p1 = 'b' / p
p2 = Path('c')
p3 = p2 / p1
print(p3.parts)
p3.joinpath('etc', 'init.d', Path('httpd'))

3.1.2 获取路径

  • str获取路径字符串
  • bytes获取路径字符串的bytes
p = Path('/etc')
print(str(p), bytes(p))

3.1.3 获取路径中的父目录

  • parent属性返回目录的逻辑父目录
  • parents属性返回父目录序列,索引0是直接的父目录
p = Path('/a/b/c/d')
 print(p.parent.parent) # 返回当前路径的父目录的父目录即/a/b
 for x in p.parents:   # 将当前路径的每一级的父目录序列化
   print(x)

 3.1.4 其他属性及方法

属性 含义
name 目录的最后一个部分
stem  目录最后一个部分,不包含后缀
suffix 目录中最后一个部分的扩展名
suffixes 返回多个扩展名列表

 和以上四个属性相关的方法:

  • with_suffix(suffix)补充扩展名到路径尾部,返回新的路径,扩展名存在则修改之

  • with_name(name)替换目录最后一个部分并返回一个新的路径

p = Path('/viktor/mysqlinstall/mysql.tar.gz')
print(p.name)  # mysql.tar.gz
print(p.suffix)  # .gz
print(p.suffixes)  # ['.tar', '.gz']
print(p.stem)  # mysql.tar
print(p.with_name('mysql-5.tgz'))  # /viktor/mysqlinstall/mysql-5.tgz
p = Path('README')
print(p.with_suffix('.txt'))  # README.txt

和文件类型相关的方法:

方法 功能
is_dir() 是否是目录,目录存在返回True
is_file() 是否是普通文件,文件存在返回True
is_symlink() 是否软链接
is_socket() 是否是socket文件
is_block_device() 是否是块设备
is_char_device() 是否是字符设备
is_absolute() 是否是绝对路径

其他几种方法:

方法 功能
cwd() 返回当前工作目录
home() 返回当前家目录
resolve()  返回一个新的路径,这个新路径就是当前Path对象的绝对路径。 如果是软链接则直接被解析
absolute() 也可以获取绝对路径,但是推荐使用resolve()
exists() 判断目录或文件是否存在
rmdir() 删除空目录。没有提供判断目录为空的方法
touch(mode=0o666, exist_ok=True) 创建一个文件
as_url() 将路径返回成URL,例如'file:///etc/passwd'
mkdir(mode=0o777, parents=False, exists_ok=False) parents参数是判断是否创建父目录,True等同于mkdir -p; False时,父目录不存在,则抛出FileNotFoundError exist_ok参数,在3.5版本加入。False时,路径存在, 抛出FileExistsError;True时,FileExistsError被忽略
iterdir() 迭代当前目录
p = Path()
p /= 'a/b/c/d'
p.exists()  # True

# 创建目录
p.mkdir()  # 如果p对象的路径存在抛出FileExistsError,否则抛出FileNotFoundError
p.mkdir(parents=True)  
p.exists()  # True
p.mkdir(parents=Ture)  # 抛出FileExistsError
p.mkdir(parents=True, exist_ok=True)  # 忽略FileExistsError
p /= 'readme.txt'
p.parent.rmdir()  # 删除readme.txt的父目录,此时真实目录中已经不存在d目录
p.parent.exists()  # False 'a/b/c'
p.mkdir()  # FileNotFoundError
p.mkdir(parent=True)  # 成功

 实现遍历,并判断文件类型,如果是目录是否可以判断其是否为空的代码:

for x in p.parents[len(p.parents)-1].iterdir():
  print(x, end='\t')
  if x.is_dir():
    flag = False
    for _ in x.iterdir():
      flag = True
      break
    print('dir','Not Empty' if flag else 'Empty', sep='\t')
  elif x.is_file():
    print('file')
  else:
    print('other file')

3.2 文件操作

pathlib中的Path还提供open(mode='r', buffering=-1, encoding=None, errors=None, newline=None)方法打开文件,其使用方法类似内建函数open,返回一个文件对象。Ptyhon3.5后pathlib模块新增加了一些方法,如下所示:

方法 功能
read_bytes() 以‘rb'读取路径对应文件,并返回二进制流
read_text(encoding=None, errors=None) 以'rt'方式读取路径对应文件,返回文本
Path.write_bytes(data) 以'wb'方式写入数据到路径对应文件
write_text(data, encoding=None, errors=None) 以'wt'方式写入字符串到路径对应文件
p = Path("my_binary_file")
p.write_bytes(b'Binary file contents')  # 以'wb'形式向p路径对象写入数据
p.read_bytes()

p = Path("my_text_file")
p.write_text('Text file contents')  # 以'wt'形式向p路径对象写入数据
p.read_text()

with p.open() as f:
  print(f.read(5))

总结

以上所述是小编给大家介绍的Python文件路径名的操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
Python备份目录及目录下的全部内容的实现方法
Jun 12 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
Python subprocess库的使用详解
Oct 26 Python
Python中一般处理中文的几种方法
Mar 06 Python
python tkinter GUI绘制,以及点击更新显示图片代码
Mar 14 Python
解决pycharm下pyuic工具使用的问题
Apr 08 Python
Python利用for循环打印星号三角形的案例
Apr 12 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
pyinstaller将含有多个py文件的python程序做成exe
Apr 29 Python
解决pytorch 损失函数中输入输出不匹配的问题
Jun 05 Python
Python元组 tuple的概念与基本操作详解【定义、创建、访问、计数、推导式等】
Oct 30 #Python
解决python 上传图片限制格式问题
Oct 30 #Python
Python字典的概念及常见应用实例详解
Oct 30 #Python
Python集合基本概念与相关操作实例分析
Oct 30 #Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 #Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
Oct 30 #Python
python常见字符串处理函数与用法汇总
Oct 30 #Python
You might like
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
PHP在线生成二维码代码(google api)
2013/06/03 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
ExtJS PropertyGrid中使用Combobox选择值问题
2010/06/13 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
目前流行的JavaScript库的介绍及对比
2013/09/29 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
js+css实现有立体感的按钮式文字竖排菜单效果
2015/09/01 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
Javascript实现图片轮播效果(二)图片序列节点的控制实现
2016/02/17 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
浅谈JSON.stringify()和JOSN.parse()方法的不同
2016/08/29 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
20多个小事例带你重温ES10新特性(小结)
2019/09/29 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
Python编程中运用闭包时所需要注意的一些地方
2015/05/02 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
python实现飞机大战
2018/09/11 Python
python正则表达式去除两个特殊字符间的内容方法
2018/12/24 Python
python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)
2019/08/28 Python
python matplotlib imshow热图坐标替换/映射实例
2020/03/14 Python
css3 flex布局 justify-content:space-between 最后一行左对齐
2020/01/02 HTML / CSS
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
大学生学习党课思想汇报
2014/01/03 职场文书
总会计师岗位职责
2014/02/19 职场文书
大学四年个人的自我评价
2014/02/26 职场文书
作文批改评语
2014/12/25 职场文书
幼儿园教师师德师风承诺书
2015/04/28 职场文书
《富饶的西沙群岛》教学反思
2016/02/16 职场文书
利用python实时刷新基金估值(摸鱼小工具)
2021/09/15 Python