Python文件路径名的操作方法
1文件路径名操作
对于文件路径名的操作在编程中是必不可少的,比如说,有时候要列举一个路径下的文件,那么首先就要获取一个路径,再就是路径名的一个拼接问题,通过字符串的拼接就可以得到一个路径名。Python中3.4版本前使用os.path模块中的函数来操作路径名;3.4版本开始提供pathlib模块,使用Path对象来对目录和文件进行操作。
2os.path模块
fromosimportpath 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)) whilep1!=path.dirname(p1):#每次取上级目录中的基名 p1=path.dirname(p1) print(p1,path.basename(p1))
3pathlib模块
3.1目录操作
3.1.1路径拼接和分解
操作符"/"对路径拼接
“/”操作符可以对两个Path对象进行拼接、字符串和Path对象或者Path对象和字符串进行拼接
parts属性
parts属性,可以返回路径中的每一个部分
joinpath
joinpath(*other)连接多个字符串到Path对象中
frompathlibimportPath 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 forxinp.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()
是否是绝对路径
其他几种方法:
返回一个新的路径,这个新路径就是当前Path对象的绝对路径。 如果是软链接则直接被解析 touch(mode=0o666, exist_ok=True) mkdir(mode=0o777, parents=False, exists_ok=False) parents参数是判断是否创建父目录,True等同于mkdir-p; False时,父目录不存在,则抛出FileNotFoundError exist_ok参数,在3.5版本加入。False时,路径存在, 抛出FileExistsError;True时,FileExistsError被忽略
方法
功能
cwd()
返回当前工作目录
home()
返回当前家目录
resolve()
absolute()
也可以获取绝对路径,但是推荐使用resolve()
exists()
判断目录或文件是否存在
rmdir()
删除空目录。没有提供判断目录为空的方法
创建一个文件
as_url()
将路径返回成URL,例如'file:///etc/passwd'
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)#成功
实现遍历,并判断文件类型,如果是目录是否可以判断其是否为空的代码:
forxinp.parents[len(p.parents)-1].iterdir(): print(x,end='\t') ifx.is_dir(): flag=False for_inx.iterdir(): flag=True break print('dir','NotEmpty'ifflagelse'Empty',sep='\t') elifx.is_file(): print('file') else: print('otherfile')
3.2文件操作
pathlib中的Path还提供open(mode='r',buffering=-1,encoding=None,errors=None,newline=None)方法打开文件,其使用方法类似内建函数open,返回一个文件对象。Ptyhon3.5后pathlib模块新增加了一些方法,如下所示:
read_text(encoding=None, errors=None) write_text(data,encoding=None, errors=None)
方法
功能
read_bytes()
以‘rb'读取路径对应文件,并返回二进制流
以'rt'方式读取路径对应文件,返回文本
Path.write_bytes(data)
以'wb'方式写入数据到路径对应文件
以'wt'方式写入字符串到路径对应文件
p=Path("my_binary_file") p.write_bytes(b'Binaryfilecontents')#以'wb'形式向p路径对象写入数据 p.read_bytes() p=Path("my_text_file") p.write_text('Textfilecontents')#以'wt'形式向p路径对象写入数据 p.read_text() withp.open()asf: print(f.read(5))
总结
以上所述是小编给大家介绍的Python文件路径名的操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。