Python的高级文件操作
一、前言
Python内置的os模块除了可以目录进行操作,还可以对文件进行一些高级操作,具体操作如下表:
函数
说明
access(path,accessmode)
获取对文件是否有指定的访问权(读取/写入/执行权限)。accessmode的值是R_OK(读取)、W_OK(写入)或F_OK(存在)。如果有指定的权限,则返回1,否则返回0
chmod(path,mode)
修改path指定文件的访问权限
remove(path)
删除path指定的文件路径
rename(src,dst)
将文件或目录src重命名为dst
stat(path)
返回path指定文件的信息
startfile(path[,operation])
使用关联的应用程序打开path指定的文件
二、删除文件
Python没有内置删除文件的函数,但是在内置的os模块中提供了删除文件的函数remove(),该函数的基本语法格式如下:
os.remove(path)
其中,path为要删除的文件路径,可以使用相对路径,也可以使用绝对路径。
例如,要删除当前工作目录下的mrsoft.txt文件,可以使用下面代码:
import os
os.remove("mrsoft.txt")
执行上面的代码后,如果在当前工作目录下存在mrsoft.txt文件,即可将其删除,否则将显示如图所示异常。
为了解决以上异常,可以在删除文件时,先判断文件是否存在,只有存在时才能执行删除操作。具体代码如下:
import os # 导入os模块
path = "mrsoft.txt" # 要删除的文件
if os.path.exists(path): # 判断文件是否存在
os.remove(path) # 删除文件
print("文件删除完毕!")
else:
print("文件不存在!")
执行上面代码,如果mrsoft.txt不存在,则显示以下内容:
文件不存在!
否则将显示以下内容,同时文件被删除:
文件删除完毕!
三、重命名文件和目录
os模块提供了重命名文件和目录函数rename(),如果指定的路径时文件,则重命名文件;如果是指定的路径是目录,则重命名目录。rename()函数基本语法格式:
os.rename(src,dst)
其中,src用于指定要进行重命名的目录或文件;dst用于指定重命名后的目录或文件。
同删除文件一样,在进行文件或目录重命名时,如果指定的目录或文件不存在,也将抛出FileNotFoundError异常,所以在进行文件或目录重命名时,也建议先判断文件或目录是否存在,只有存在时才进行重名操作。
例如,想要将“D:PythonCodehelloworld.py”文件重名为“D:PythonCodemr.py”可以使用下面代码:
import os # 导入os模块
src = "D:\Python\Code\01\helloworld.py" # 要重名命名的文件
dst = "D:\Python\Code\01\mr.py" # 重名命名后的文件
if os.path.exists(src): # 判断文件是否存在
os.rename(src,dst) # 重命名文件
print("文件重命名完毕!")
else:
print("文件不存在!")
执行上面代码,如果“D:PythonCodehelloworld.py”文件不存在,则显示以下内容:
文件不存在!
否则将显示以下内容,同时文件被重命名:
文件重命名完毕!
使用rename()函数重命名目录与命名文件相同,只要把原来文件路径替换为目录即可,例如想要将当前目录下的Code目录重名命为test,可以使用下面代码:
import os # 导入os模块
src = "Code" # 要重名命名的目录
dst = "test" # 重名命名后的目录
if os.path.exists(src): # 判断文件是否存在
os.rename(src,dst) # 重命名文件
print("文件重命名完毕!")
else:
print("文件不存在!")
注意: 在使用rename()函数重命名目录时,只能修改最后一级的目录名称,否则将抛出如图所示异常:
四、获取文件基本信息
在计算机上创建文件后,该文件本身就会包含一些信息。例如,文件的最后一次访问时间,最后一次修改时间、文件的大小等基本信息。通过os模块的stat()函数可以获取到文件的这些基本信息。stat()函数的基本语法格式如下:
os.stat(path)
其中,path为要获取文件基本信息的文件路径,可以是相对路径,也可以是绝对路径。
stat()函数的返回值是一个对象,该对象包含如下表的属性。通过访问这些属性可以获取文件的基本信息。
属性
说明
st_mode
保护模式
st_ino
索引号
st_nlink
硬件接号(被连接数目)
st_size
文件大小,单位为字节
st_mtime
最后一次修改时间
st_dev
设备名
st_uid
用户ID
st_gid
组ID
st_atime
最后一次访问的时间
st_ctime
最后一次状态的时间(系统不同返回结果也不同,例如,在Windows操作系统下返回的是文件的创建时间)
例如,获取message.txt文件的路径、大小和最后一次修改的时间,代码如下:
import os
if os.path.exists("message.txt"):
fileinfo = os.stat("message.txt")
print("完整路径:", os.path.abspath("message.txt"))
print("文件大小:", fileinfo.st_size, "字节")
print("最后一次修改时间", fileinfo.st_mtime)
执行上面代码,将显示如下结果: