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中文件路径名的操作的更多相关文章

  1. python中文件的基础操作

    打开文件的三种方式: open(r'E:\学习日记\python\code\文件的简单操作.py') open('E:\\学习日记\\python\\code\\文件的简单操作.py') open(' ...

  2. python 中文件夹的操作

    文件有两个管家属性:路径和文件名. 路径指明了文件在磁盘的位置,文件名原点的后面部分称为扩展名(后缀),它指明了文件的类型. 一:文件夹操作 Python中os 模块可以处理文件夹 1,当前工作目录 ...

  3. Python之文件路径名的操作

    使用 os.path 模块中的函数来操作路径名 import os # 获取当前文件路径 path=os.path.abspath(__file__) # 获取绝对路径 /home/zzy/Pycha ...

  4. 『无为则无心』Python基础 — 41、Python中文件的读写操作(一)

    目录 1.文件操作步骤 2.文件的读写操作 (1)文件的打开 (2)打开文件模式 (3)获取一个文件对象 (4)关于文件路径 1.文件操作步骤 当我们要读取或者写入文件时,我们需要打开文件,在操作完毕 ...

  5. Python中文件的读写操作的几种方法

    对文件的操作,步骤为:打开一个文件-->读取/写入内容-->保存文件 文件读写的3中模式 # 1.w 写模式,它是不能读的,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写 ...

  6. Python中文件的读写操作

    文件操作基本流程: 1. 介绍 计算机系统是由计算机硬件,操作系统,和应用程序三部分组成. 内存 存放不持久 硬盘 可以使数据持久化 文件操作  数据持久化的一种 全栈开发  框架类 2. 文件的操作 ...

  7. 『无为则无心』Python基础 — 42、Python中文件的读写操作(二)

    目录 (5)文件对象方法(重点) 1)写方法 2)读方法 3)seek()方法 4)tell()方法 (6)关闭 (7)综合练习:读取大文件 (5)文件对象方法(重点) 1)写方法 @1.语法 对象对 ...

  8. python 关于文件夹的操作

    在python中,文件夹的操作主要是利用os模块来实现的, 其中关于文件夹的方法为:os.lister() , os.path.join() , os.path.isdir() #  path 表示文 ...

  9. python 中文件输入输出及os模块对文件系统的操作

    整理了一下python 中文件的输入输出及主要介绍一些os模块中对文件系统的操作. 文件输入输出 1.内建函数open(file_name,文件打开模式,通用换行符支持),打开文件返回文件对象. 2. ...

随机推荐

  1. Hadoop 之 MapReduce原理

    1.什么是MapReduce 答:简而言之,就是将一个大任务分成多个小的子任务(Map),并行执行后,合并结果(Reduce).下面举一个纸牌得栗子  2.MapReduce的运行流程  3.JobT ...

  2. MybatisPlus报错Invalid bound statement (not found)的解决方案

    今天使用MybatisPlus,测试时报错Invalid bound statement (not found) 使用自定义的mapper接口中的方法可以执行,而调用MybatisPlus中baseM ...

  3. 使用Storm实现累加求和操作

    package com.csylh; import org.apache.storm.Config; import org.apache.storm.LocalCluster; import org. ...

  4. node环境及vscode搭建

    软件下载: nodejs https://nodejs.org/en/ vscode https://code.visualstudio.com/docs/?dv=win python-2.7.15 ...

  5. 【SQL基础】char,nchar,vchar,nvchar之间的区别

    (1)       定义: char:    固定长度,存储ANSI字符,不足的补英文半角空格. nchar:   固定长度,存储Unicode字符,不足的补英文半角空格 varchar:  可变长度 ...

  6. 遇见Python

    开发: 开发语言:    1.高级语言:Python  Java.PHP    C#    Go  ruby C++...    ===> 字节码    2.低级语言:C.汇编          ...

  7. Angular template ng-template/container/content

    1. ng-template 形式:<ng-template>...</ng-template> 默认ng-template中的内容会隐藏; 可通过[ngIf]来控制内容显示隐 ...

  8. C# 服务里面调用Python.exe 来执行python文件

    问题描述:在WCF服务里面通过调用python.exe来执行py文件,像下面这样py文件路径+参数,用空格隔开.会出现调用结果为空的现象 System.Diagnostics.ProcessStart ...

  9. win7环境搭建以太坊私链

    如何创建私链: 创建创世配置文件: 首先需要创建一个“创世”json配置文件,此文件描述了创世区块的一些参数.下面就是文件中的内容: { "coinbase": "0x0 ...

  10. CSDN VIP如何添加引流自定义栏目

    几个月前我也开始在csdn上开了博客,一来给自己加几个少的可怜的流量,再者,让公众号的原创文章获得更多的曝光,让有需要的同学看到. 写过csdn博客的同学都知道,默认只有打赏c币功能:也没有专门广告位 ...