目录

1. 路径模式修改

p.chmod(mode, *, follow_symlinks=True)

p.lchmod(mode)

2. 路径修改

p.rename(target)

p.replace(target)

3. 路径移除

p.rmdir()

p.unlink(missing_ok=False)

4. 文件修改

p.write_text(data, encoding=None, errors=None, newline=None)

p.write_bytes(data)


下述方法,基于pathlib.PurePath、pathlib.Path函数模块。

1. 路径模式修改

p.chmod(mode, *, follow_symlinks=True)

改变文件模式和权限,和 os.chmod() 一样;此方法通常会跟随符号链接,某些 Unix 变种支持改变 symlink 本身的权限,在这些平台上你可以添加参数 follow_symlinks=False,或者使用 lchmod() 方法;

目录的读权限表示可以获取目录里文件名列表,执行权限表示可以把工作目录切换到此目录,删除添加目录里的文件必须同时有写和执行权限 ;

文件权限以用户id->组id->其它顺序检验,最先匹配的允许或禁止权限被应用;

mode 常用常量如下表,如要直接使用常量名,需导入 stat 函数模块,否则直接使用数值;

注意下表中数值为8进制(0o),直接输入chmod() 函数则需要输入十进制整数。

常量名

数值

描述

stat.S_IXOTH

0o001

其他用户有执行权

stat.S_IWOTH

0o002

其他用户有写权限

stat.S_IROTH

0o004

其他用户有读权限

stat.S_IRWXO

0o007

其他用户有全部权限(权限掩码)

stat.S_IXGRP

0o010

组用户有执行权限

stat.S_IWGRP

0o020

组用户有写权限

stat.S_IRGRP

0o040

组用户有读权限

stat.S_IRWXG

0o070

组用户有全部权限(权限掩码)

stat.S_IXUSR

0o100

拥有者具有执行权限

stat.S_IWUSR

0o200

拥有者具有写权限

stat.S_IRUSR

0o400

拥有者具有读权限

stat.S_IRWXU

0o700

拥有者有全部权限(权限掩码)

stat.S_ISVTX

0o1000

目录里文件目录只有拥有者才可删除更改

stat.S_ISGID

0o2000

执行此文件其进程有效组为文件所在组

stat.S_ISUID

0o4000

执行此文件其进程有效用户为文件所有者

stat.S_IREAD

windows下设为只读

stat.S_IWRITE

windows下取消只读

p = Path('E:\\David\\Code\\python\\文件\\test.txt')#导入stat模块
import stat#设置文件为只读,读取成功、写入失败
p.chmod(stat.S_IREAD)
p.read_text()
'12345'
p.write_text('56789')
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1285, in write_textwith self.open(mode='w', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
PermissionError: [Errno 13] Permission denied: 'E:\\David\\Code\\python\\文件\\test.txt'#设置文件取消只读,读取、写入都成功
p.chmod(stat.S_IWRITE)
p.read_text()
'12345'
p.write_text('56789')
5
p.read_text()
'56789'#设置文件0o400 = 256,拥有者具有读权限,写入失败
p.chmod(256)
p.read_text()
'56789'
p.write_text('56789')
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1285, in write_textwith self.open(mode='w', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
PermissionError: [Errno 13] Permission denied: 'E:\\David\\Code\\python\\文件\\test.txt'

p.lchmod(mode)

类似 Path.chmod() 方法,但是如果路径指向符号链接则是修改符号链接的模式,而不是修改符号链接指向的目标。windows 系统不支持。

p.lchmod(stat.S_IWRITE)
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1346, in lchmodself._accessor.lchmod(self, mode)File "D:\Anaconda\lib\pathlib.py", line 427, in lchmodraise NotImplementedError("lchmod() not available on this system")
NotImplementedError: lchmod() not available on this system

2. 路径修改

p.rename(target)

将路径指定的文件或文件夹重命名为 target 参数指定的名字,并返回一个新的 Path 实例;

target参数除指定名字的文件/文件夹,还需包括文件/文件夹的路径,如没有声明具体路径,则将新文件/文件夹置于默认文件夹;

新文件/文件夹名字、位置修改后,原文件/文件夹无法再被读取;

新文件/文件夹的名字如与移动后的路径中的文件/文件夹冲突,则报错;

文件修改名称、路径后,文件内容不变;文件夹修改名称、路径后,文件夹内原有文件不变。

p1 = Path('D:\\PycharmProject\\测试文件\\test.txt')
p1.read_text()
'中a文b一c二d三e\n0123456789\n*****\t*****\n-----'#没有声明具体路径,则将新文件/文件夹置于默认文件夹
p2 = p1.rename('test3.txt')
p2
WindowsPath('test3.txt')
p2.absolute()
WindowsPath('D:/PycharmProject/test3.txt')#新文件/文件夹名字、位置修改后,原文件/文件夹无法再被读取
p1.read_text()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1266, in read_textwith self.open(mode='r', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\PycharmProject\\测试文件\\test.txt'#文件修改名称、路径后,文件内容不变;
p2.read_text()
'中a文b一c二d三e\n0123456789\n*****\t*****\n-----'#新文件/文件夹的名字如与移动后的路径中的文件/文件夹冲突,则报错
p3 = p2.rename('D:\\PycharmProject\\测试文件\\test2.txt')
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1382, in renameself._accessor.rename(self, target)
FileExistsError: [WinError 183] 当文件已存在时,无法创建该文件。: 'test3.txt' -> 'D:\\PycharmProject\\测试文件\\test2.txt'#修改相对路径,将新文件/文件夹置于新设置绝对路径并改名
p3 = p2.rename('D:\\PycharmProject\\测试文件\\test1.txt')
p3.read_text()
'中a文b一c二d三e\n0123456789\n*****\t*****\n-----'#文件夹修改名称、路径后,文件夹内原有文件不变
p4 = Path('D:\\PycharmProject\\测试文件\\二级测试文件夹')
list(p4.iterdir())
[WindowsPath('测试文件/二级测试文件夹/test11.txt')]p5 = p4.rename('.\\测试文件\\新二级测试文件夹')
p5
WindowsPath('测试文件/新二级测试文件夹')
list(p5.iterdir())
[WindowsPath('测试文件/新二级测试文件夹/test11.txt')]

p.replace(target)

将路径指定的文件或文件夹重命名为 target 参数指定的名字,并返回一个新的 Path 实例;

与 rename() 的区别在于,replace() 的 target 参数如果指向了已存在的文件或文件夹,则路径指定的文件或文件夹将被无条件地替换;

目标路径可能为绝对路径或相对路径,相对路径将被解释为相对于当前工作目录,而不是相对于 Path 对象指定的目录。

p1 = Path('D:\\PycharmProject\\测试文件\\test1.txt')
p2 = Path('D:\\PycharmProject\\测试文件\\test2.txt')
p1.read_text()
'test1\n\n123456\nabcDEF'
p2.read_text('utf-8')
'test2\n\n中文!!\nabcDEF'#replace() 的 target 参数指向已存在的文件或文件夹
p1.replace('.\\测试文件\\test2.txt')
WindowsPath('测试文件/test2.txt')#则路径指定的文件或文件夹将被无条件地替换,原文件/文件夹无法访问
p2.read_text('utf-8')
'test1\n\n123456\nabcDEF'
p1.read_text()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1266, in read_textwith self.open(mode='r', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\PycharmProject\\测试文件\\test1.txt'

3. 路径移除

p.rmdir()

移除该路径指定的文件夹;

指定文件夹必须为空文件夹,否则报错;

删除文件或指定文件夹不存在,报错。

#路径指向空文件夹
p = Path('D:\\PycharmProject\\测试文件\\空测试文件夹')
list(p.glob('**\\'))
[WindowsPath('D:/PycharmProject/测试文件/空测试文件夹')]
list(p.glob('**\\*.*'))
[]#删除文件夹成功
p.rmdir()
list(p.glob('**\\'))
[]#路径指向非空文件夹
p = Path('D:\\PycharmProject\\测试文件\\二级测试文件夹')
list(p.glob('**\\'))
[WindowsPath('D:/PycharmProject/测试文件/二级测试文件夹')]
list(p.glob('**\\*.*'))
[WindowsPath('D:/PycharmProject/测试文件/二级测试文件夹/test11.txt')]#删除文件夹成功
p.rmdir()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1363, in rmdirself._accessor.rmdir(self)
OSError: [WinError 145] 目录不是空的。: 'D:\\PycharmProject\\测试文件\\二级测试文件夹'
list(p.glob('**\\'))
[WindowsPath('D:/PycharmProject/测试文件/二级测试文件夹')]#删除文件,报错。
p = Path('D:\\PycharmProject\\测试文件\\test1.txt')
p.rmdir()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1363, in rmdirself._accessor.rmdir(self)
NotADirectoryError: [WinError 267] 目录名称无效。: 'D:\\PycharmProject\\测试文件\\test1.txt'#指定文件夹不存在,报错。
p.rmdir()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1363, in rmdirself._accessor.rmdir(self)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'D:\\PycharmProject\\测试文件\\空测试文件夹2'

p.unlink(missing_ok=False)

移除该路径指定的文件或符号链接;

如果路径指向是文件夹,删除失败,报错拒绝访问;

3.8 版添加 missing_ok 参数:

  • missing_ok = False(默认),则在路径不存时抛出 FileNotFoundError 异常。
  • missing_ok = True,则 FileNotFoundError 异常将被忽略(和 POSIX rm -f 命令的行为相同)。
p = Path('D:\\PycharmProject\\测试文件\\test1.txt')
p.read_text()
'test1\n\n123456\nabcDEF'#移除该路径指定的文件或符号链接;
p.unlink()
p.read_text()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1266, in read_textwith self.open(mode='r', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\PycharmProject\\测试文件\\test1.txt'#missing_ok = True,则 FileNotFoundError 异常将被忽略
p.unlink(True)
#missing_ok = False(默认),则在路径不存时抛出 FileNotFoundError 异常
p.unlink(False)
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1354, in unlinkself._accessor.unlink(self)
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'D:\\PycharmProject\\测试文件\\test1.txt'#如果路径指向是文件夹,删除失败,报错拒绝访问
p = Path('D:\\PycharmProject\\测试文件\\空测试文件夹')
list(p.glob('**\\'))
[WindowsPath('D:/PycharmProject/测试文件/空测试文件夹')]
p.unlink()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1354, in unlinkself._accessor.unlink(self)
PermissionError: [WinError 5] 拒绝访问。: 'D:\\PycharmProject\\测试文件\\空测试文件夹'

4. 文件修改

p.write_text(data, encoding=None, errors=None, newline=None)

将路径以文本模式打开,然后写入 data 参数指定的数据,最后关闭文件:

路径指向文件存在,使用 data 参数指定数据覆盖原文件;

路径指向文件不存在,但路径指向文件之前的目录正确,创建新文件写入 data 参数指定数据;

路径指向文件不存在,且路径指向文件之前的目录也不存在,报错;

路径指向文件夹,报错。

#路径指向文件存在,使用 data 参数指定数据覆盖原文件
p = Path('D:\\PycharmProject\\测试文件\\test1.txt')
p.read_text()
'test1\n\n123456\nabcDEF\n'
p.write_text('test1x\nAAAAAAAAA')
16
p.read_text()
'test1x\nAAAAAAAAA'#路径指向文件不存在,但路径指向文件之前的目录正确,创建新文件写入 data 参数指定数据
p = Path('D:\\PycharmProject\\测试文件\\test3.txt')
p.read_text()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1266, in read_textwith self.open(mode='r', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\PycharmProject\\测试文件\\test3.txt'
p.write_text('test3x\nAAAAAAAAA')
16
p.read_text()
'test3x\nAAAAAAAAA'#创建空文件
p = Path('D:\\PycharmProject\\测试文件\\test4.txt')
p.write_text('')
0
p.read_text()
''#路径指向文件不存在,且路径指向文件之前的目录也不存在,报错
p = Path('D:\\PycharmProject\\测试文件\\测试文件2\\test.txt')
p.write_text('test\nAAAAAAAAA')
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1285, in write_textwith self.open(mode='w', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\PycharmProject\\测试文件\\测试文件2\\test.txt'#路径指向文件夹,报错
p = Path('D:\\PycharmProject\\测试文件')
p.write_text('12345')
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1285, in write_textwith self.open(mode='w', encoding=encoding, errors=errors) as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
PermissionError: [Errno 13] Permission denied: 'D:\\PycharmProject\\测试文件'

p.write_bytes(data)

将路径以二进制的形式打开,然后写入 data 参数指定的数据,最后关闭文件:

路径指向文件存在,使用 data 参数指定数据覆盖原文件;

路径指向文件不存在,但路径指向文件之前的目录正确,创建新文件写入 data 参数指定数据;

路径指向文件不存在,且路径指向文件之前的目录也不存在,报错;

路径指向文件夹,报错。

#路径指向文件存在,使用 data 参数指定数据覆盖原文件
p = Path('D:\\PycharmProject\\测试文件\\test1.txt')
p.read_bytes()
b'test1\r\n\r\n123456\r\nabcDEF\r\n'
p.write_bytes(b'test1x\nAAAAAAAAAAAA')
19
p.read_bytes()
b'test1x\nAAAAAAAAAAAA'#路径指向文件不存在,但路径指向文件之前的目录正确,创建新文件写入 data 参数指定数据
p = Path('D:\\PycharmProject\\测试文件\\test3.txt')
p.read_bytes()
Traceback (most recent call last):File "<input>", line 1, in <module>File "D:\Anaconda\lib\pathlib.py", line 1259, in read_byteswith self.open(mode='rb') as f:File "D:\Anaconda\lib\pathlib.py", line 1252, in openreturn io.open(self, mode, buffering, encoding, errors, newline,File "D:\Anaconda\lib\pathlib.py", line 1120, in _openerreturn self._accessor.open(self, flags, mode)
FileNotFoundError: [Errno 2] No such file or directory: 'D:\\PycharmProject\\测试文件\\test3.txt'
p.write_bytes(b'test3x\nAAAAAAAAAAAA')
19
p.read_bytes()
b'test3x\nAAAAAAAAAAAA'

文件13:文件路径-路径文件删改方法相关推荐

  1. iOS 把数据库文件打包到mainbundle中,查找不到路径的解决的方法;以及在删除bundle中文件的可行性...

    在开发中有时我们须要把数据库文件打包到我们的项目中.一般我们都是在外部用工具生成数据库文件,然后拉入项目中.可是我们在程序中查找改文件时.返回的路径总是nil 解决的方法: 原因我们拉入其它资源文件( ...

  2. iPhone PHP获取文件,IOS中获取各种文件的目录路径的方法

    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...

  3. php自动分配,PHP上传文件时自动分配路径的方法_php技巧

    本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的文件多了,我们就不能放在同一个目录了, ...

  4. php 选择路径上传方法,PHP上传文件时自动分配路径的方法,_PHP教程

    PHP上传文件时自动分配路径的方法, 本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的 ...

  5. python获取绝对路径_python3中获取文件当前绝对路径的两种方法

    方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworki ...

  6. sqlite3打开中文路径数据文件失败解决方法

    今天用sqlite3访问中文路径的数据库文件,发现sqlite3_open函数返回失败,问度娘后,有网友建议sqlite3_open16打开,sqlite3_open16和sqlite3_open区别 ...

  7. VB 窗体实现文件拖拽获取路径方法

    Private Sub Form_Load()     Form1.OLEDropMode = 1 End Sub Private Sub Form_OLEDragDrop(Data As DataO ...

  8. 批处理查找html,批处理(bat)实现全盘搜索指定文件获取其完整路径方法大全,bat大全分享...

    废话不多说,直接上代码,额,想用的话,自己保存成 [方案一]for /f + dir % [方案二]for /r(比 for /f + dir 效率高,但不会遍历隐藏文件) @echo off rem ...

  9. macbook自带python保存文件夹_在mac下查找python包存放路径site-packages的实现方法 在Mac系统下python如何安装第三方函数库?...

    mac怎么查看python的site-package位置世界上最伤心的事,不是你爱的人不爱你,而是他爱你过后,最后却不爱你. 可以通过find命令查看,参考demo如下: sudo find / -n ...

最新文章

  1. HTML保存节点,{HTML5}DOM节点操作-第一节
  2. 使用FPM快速生成RPM包
  3. python等差分解一个数
  4. 【Linux】 -bash-4.2#问题和Cannot allocate memory
  5. Android注解使用之ButterKnife 8.0注解使用介绍
  6. 硕士:论文提交和考试
  7. 旅途人物之二:幸福的孩子们
  8. 安卓menu页面跳转_微信安卓版7.0.14内测!“发现小程序”页面大改版
  9. xcode 自动化出包
  10. 解决MATLAB不能设置为.m文件默认打开方式
  11. 调整地面材质_【C4DtoA 13】Arnold渲染器(材质七): Shadow Matte Shader
  12. 计算机国家实验教学示范中心,教育部 财政部关于批准2007年国家级实验教学示范中心建设...
  13. C# BackGroundWorker 的简单使用
  14. datetime数据类型_当pandas遇上数据类型问题
  15. 微博短链接解析ShortUrl【PHP代码实现】
  16. mybatis源码分析(1)-----sqlSessionFactory创建
  17. 手机音频拼接软件_自媒体视频,手机剪辑有哪些软件推荐?
  18. 卷积码主要是对抗_采用卷积编码的原因和优势 浅析卷积码之特点
  19. come的喂abc是什么梗
  20. multi-kernels、ALLOC与USE、Zero-Copy

热门文章

  1. OpenNLP使用小结
  2. 吊打tomcat的高性能web服务器undertow
  3. 华为、蚂蚁金服等都在招聘的大数据开发,需要具备哪些技能
  4. 语音验证码接收平台接口调用文档
  5. 毫米波雷达「增量」升级
  6. WinX DVD Ripper for Mac(DVD视频格式转换工具)
  7. 【Lintcode】1799. Sequence Summation
  8. Ai带你玩股票项目(V1.0)内测说明
  9. 1.5.6.六种常见的三角关系
  10. luogu P3975 [TJOI2015]弦论 SAM