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 相关文章推荐
python多线程编程方式分析示例详解
Dec 06 Python
安装Python的web.py框架并从hello world开始编程
Apr 25 Python
python爬虫_实现校园网自动重连脚本的教程
Apr 22 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
python3.6使用tkinter实现弹跳小球游戏
May 09 Python
python里 super类的工作原理详解
Jun 19 Python
python 串口读取+存储+输出处理实例
Dec 26 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
基于python 等频分箱qcut问题的解决
Mar 03 Python
在python中修改.properties文件的操作
Apr 08 Python
Pycharm配置autopep8实现流程解析
Nov 28 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
重置版游戏视频
2020/04/09 魔兽争霸
php miniBB中文乱码问题解决方法
2008/11/25 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
js类型检查实现代码
2010/10/29 Javascript
javascript的数据类型、字面量、变量介绍
2012/05/23 Javascript
表单类各种类型(文本框)失去焦点效果jquery代码
2013/04/26 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
简单谈谈JavaScript的同步与异步
2015/12/31 Javascript
浅谈angular懒加载的一些坑
2016/08/20 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
headjs实现网站并行加载但顺序执行JS
2016/11/29 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
AngularJS使用带属性值的ng-app指令实现自定义模块自动加载的方法
2017/01/04 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
2019/05/23 Javascript
JavaScript实现抖音罗盘时钟
2019/10/11 Javascript
利用js实现简易红绿灯
2020/10/15 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[02:43]DOTA2英雄基础教程 圣堂刺客
2013/12/09 DOTA
[01:35]辉夜杯战队访谈宣传片—LGD
2015/12/25 DOTA
Go/Python/Erlang编程语言对比分析及示例代码
2018/04/23 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
在python3中实现查找数组中最接近与某值的元素操作
2020/02/29 Python
python实现ssh及sftp功能(实例代码)
2020/03/16 Python
深入了解python列表(LIST)
2020/06/08 Python
什么是python类属性
2020/06/10 Python
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
ShellScript面试题一则-ShellScript编程
2014/03/05 面试题
面试后感谢信
2014/02/01 职场文书
婚礼答谢词
2015/01/04 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
Win11怎么解除儿童账号限制?Win11解除微软儿童账号限制方法
2022/07/07 数码科技