文件13:文件路径-路径文件删改方法
目录
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:文件路径-路径文件删改方法相关推荐
- iOS 把数据库文件打包到mainbundle中,查找不到路径的解决的方法;以及在删除bundle中文件的可行性...
在开发中有时我们须要把数据库文件打包到我们的项目中.一般我们都是在外部用工具生成数据库文件,然后拉入项目中.可是我们在程序中查找改文件时.返回的路径总是nil 解决的方法: 原因我们拉入其它资源文件( ...
- iPhone PHP获取文件,IOS中获取各种文件的目录路径的方法
iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么. documents,tmp,app,Library. (NSHomeDirectory ...
- php自动分配,PHP上传文件时自动分配路径的方法_php技巧
本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的文件多了,我们就不能放在同一个目录了, ...
- php 选择路径上传方法,PHP上传文件时自动分配路径的方法,_PHP教程
PHP上传文件时自动分配路径的方法, 本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的 ...
- python获取绝对路径_python3中获取文件当前绝对路径的两种方法
方法1: import sys print(sys.argv) 得到文件当前绝对路径字符串的一个列表 ['D:/pycharm/PracticeProject/ClientServerNetworki ...
- sqlite3打开中文路径数据文件失败解决方法
今天用sqlite3访问中文路径的数据库文件,发现sqlite3_open函数返回失败,问度娘后,有网友建议sqlite3_open16打开,sqlite3_open16和sqlite3_open区别 ...
- VB 窗体实现文件拖拽获取路径方法
Private Sub Form_Load() Form1.OLEDropMode = 1 End Sub Private Sub Form_OLEDragDrop(Data As DataO ...
- 批处理查找html,批处理(bat)实现全盘搜索指定文件获取其完整路径方法大全,bat大全分享...
废话不多说,直接上代码,额,想用的话,自己保存成 [方案一]for /f + dir % [方案二]for /r(比 for /f + dir 效率高,但不会遍历隐藏文件) @echo off rem ...
- macbook自带python保存文件夹_在mac下查找python包存放路径site-packages的实现方法 在Mac系统下python如何安装第三方函数库?...
mac怎么查看python的site-package位置世界上最伤心的事,不是你爱的人不爱你,而是他爱你过后,最后却不爱你. 可以通过find命令查看,参考demo如下: sudo find / -n ...
最新文章
- HTML保存节点,{HTML5}DOM节点操作-第一节
- 使用FPM快速生成RPM包
- python等差分解一个数
- 【Linux】 -bash-4.2#问题和Cannot allocate memory
- Android注解使用之ButterKnife 8.0注解使用介绍
- 硕士:论文提交和考试
- 旅途人物之二:幸福的孩子们
- 安卓menu页面跳转_微信安卓版7.0.14内测!“发现小程序”页面大改版
- xcode 自动化出包
- 解决MATLAB不能设置为.m文件默认打开方式
- 调整地面材质_【C4DtoA 13】Arnold渲染器(材质七): Shadow Matte Shader
- 计算机国家实验教学示范中心,教育部 财政部关于批准2007年国家级实验教学示范中心建设...
- C# BackGroundWorker 的简单使用
- datetime数据类型_当pandas遇上数据类型问题
- 微博短链接解析ShortUrl【PHP代码实现】
- mybatis源码分析(1)-----sqlSessionFactory创建
- 手机音频拼接软件_自媒体视频,手机剪辑有哪些软件推荐?
- 卷积码主要是对抗_采用卷积编码的原因和优势 浅析卷积码之特点
- come的喂abc是什么梗
- multi-kernels、ALLOC与USE、Zero-Copy