自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm=1001.2014.3001.5501
Python内置的os模块除了可以对目录进行操作,还可以对文件进行一些高级操作,具体函数如表4所示。
表4 os模块提供的与文件相关的函数
函 数 | 说 明 |
access(path,accessmode) | 获取对文件是否有指定的访问权限(读取/写入/执行权限)。accessmode的值是R_OK(读取)、W_OK(写入)、X_OK(执行)或F_OK(存在)。如果有指定的权限,则返回1,否则返回0 |
chmod(path,mode) | 修改path指定文件的访问权限 |
remove(path) | 删除path指定的文件路径 |
rename(src,dst) | 将文件或目录src重命名为dst |
stat(path) | 返回path指定文件的信息 |
startfile(path [, operation]) | 使用关联的应用程序打开path指定的文件 |
下面将对常用的操作进行详细介绍。
1 删除文件
Python没有内置删除文件的函数,但是在内置的os模块中提供了删除文件的函数remove(),该函数的基本语法格式如下:
os.remove(path)
其中,path为要删除的文件路径,可以使用相对路径,也可以使用绝对路径。
例如,要删除当前工作目录下的mrsoft.txt文件,可以使用下面的代码:
import os # 导入os模块
os.remove("mrsoft.txt") # 删除当前工作目录下的mrsoft.txt文件
执行上面的代码后,如果在当前工作目录下存在mrsoft.txt文件,即可将其删除,否则将显示如图26所示的异常。
图26 要删除的文件不存在时显示的异常
为了屏蔽以上异常,可以在删除文件时,先判断文件是否存在,只有存在时才执行删除操作。具体代码如下:
import os # 导入os模块
path = "mrsoft.txt" # 要删除的文件
if os.path.exists(path): # 判断文件是否存在
os.remove(path) # 删除文件
print("文件删除完毕!")
执行上面的代码,如果mrsoft.txt不存在,则显示以下内容:
文件不存在!
否则将显示以下内容,同时文件将被删除。
文件删除完毕!
2 重命名文件和目录
os模块提供了重命名文件和目录的函数rename(),如果指定的路径是文件的,则重命名文件,如果指定的路径是目录,则重命名目录。rename()函数的基本语法格式如下:
os.rename(src,dst)
其中,src用于指定要进行重命名的目录或文件;dst用于指定重命名后的目录或文件。
同删除文件一样,在进行文件或目录重命名时,如果指定的目录或文件不存在,也将抛出FileNotFoundError异常,所以在进行文件或目录重命名时,也建议先判断文件或目录是否存在,只有存在时才进行重命名操作。
例如,想要将“C:\demo\test\dir\mr\mrsoft.txt”文件重命名为“C:\demo\test\dir\mr\mr.txt”,可以使用下面的代码:
import os # 导入os模块
src = "C:\\demo\\test\\dir\\mr\\mrsoft.txt" # 要重命名的文件
dst = "C:\\demo\\test\\dir\\mr\\mr.txt" # 重命名后的文件
os.rename(src,dst) # 重命名文件
if os.path.exists(src): # 判断文件是否存在
os.rename(src,dst) # 重命名文件
print("文件重命名完毕!")
else:
print("文件不存在!")
执行上面的代码,如果“C:\demo\test\dir\mr\mrsoft.txt”文件不存在,则显示以下内容:
文件不存在!
否则将显示以下内容,同时文件被重命名。
文件重命名完毕!
使用rename()函数重命名目录与命名文件基本相同,只要把原来的文件路径替换为目录即可。例如,想要将当前目录下的demo目录重命名为test,可以使用下面的代码:
import os # 导入os模块
src = "demo" # 重命名的当前目录下的demo
dst = "test" # 重命名为test
if os.path.exists(src): # 判断目录是否存在
os.rename(src,dst) # 重命名目录
print("目录重命名完毕!")
else:
print("目录不存在!")
注意:在使用rename()函数重命名目录时,只能修改最后一级的目录名称,否则将抛出如图27所示的异常。
图27 重命名的不是最后一级目录时抛出的异常
3 获取文件基本信息
在计算机上创建文件后,该文件本身就会包含一些信息。例如,文件的最后一次访问时间、最后一次修改时间、文件大小等基本信息。通过os模块的stat()函数可以获取到文件的这些基本信息。stat()函数的基本语法如下:
os.stat(path)
其中,path为要获取文件基本信息的文件路径,可以是相对路径,也可以是绝对路径。
stat()函数的返回值是一个对象,该对象包含如表5所示的属性。通过访问这些属性可以获取文件的基本信息。
表5 stat()函数返回的对象的常用属性
属 性 | 说 明 | 属 性 | 说 明 |
st_mode | 保护模式 | st_dev | 设备名 |
st_ino | 索引号 | st_uid | 用户ID |
st_nlink | 硬链接号(被连接数目) | st_gid | 组ID |
st_size | 文件大小,单位为字节 | st_atime | 最后一次访问时间 |
st_mtime | 最后一次修改时间 | st_ctime | 最后一次状态变化的时间(系统不同返回结果也不同,例如,在Windows操作系统下返回的是文件的创建时间) |
下面通过一个具体的实例演示如何使用stat()函数获取文件的基本信息。
实例06 获取文件基本信息
在IDLE中创建一个名称为fileinfo.py的文件,首先在该文件中导入os模块,然后调用os模块的stat()函数获取文件的基本信息,最后输出文件的基本信息,代码如下:
import os # 导入os模块
fileinfo = os.stat("mr.png") # 获取文件的基本信息
print("文件完整路径:", os.path.abspath("mr.png")) # 获取文件的完整数路径
# 输出文件的基本信息
print("索引号:",fileinfo.st_ino)
print("设备名:",fileinfo.st_dev)
print("文件大小:",fileinfo.st_size," 字节")
print("最后一次访问时间:",fileinfo.st_atime)
print("最后一次修改时间:",fileinfo.st_mtime)
print("最后一次状态变化时间:",fileinfo.st_ctime)
运行上面的代码,将显示如图28所示的结果。
图28 获取并显示文件的基本信息
由于上面的结果中的时间和字节数都是一长串的整数,与我们平时见到的有所不同,所以一般情况下,为了让显示更加直观,还需要对这样的数值进行格式化。这里主要编写两个函数,一个用于格式化时间,另一个用于格式化代表文件大小的字节数。修改后的代码如下:
import os # 导入os模块
def formatTime(longtime):
'''格式化日期时间的函数
longtime:要格式化的时间
'''
import time # 导入时间模块
return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(longtime))
def formatByte(number):
'''格式化文件大小的函数
number:要格式化的字节数
'''
for (scale,label) in [(1024*1024*1024,"GB"),(1024*1024,"MB"),(1024,"KB")]:
if number>= scale: # 如果文件大小大于或等于1KB
return "%.2f %s" %(number*1.0/scale,label)
elif number == 1: # 如果文件大小为1字节
return "1 字节"
else: # 处理小于1KB的情况
byte = "%.2f" % (number or 0)
# 去掉结尾的.00,并且加上单位“字节”
return (byte[:-3] if byte.endswith('.00') else byte)+" 字节"
if __name__ == '__main__':
fileinfo = os.stat("mr.png") # 获取文件的基本信息
print("文件完整路径:", os.path.abspath("mr1.png")) # 获取文件的完整数路径
# 输出文件的基本信息
print("索引号:",fileinfo.st_ino)
print("设备名:",fileinfo.st_dev)
print("文件大小:",formatByte(fileinfo.st_size))
print("最后一次访问时间:",formatTime(fileinfo.st_atime))
print("最后一次修改时间:",formatTime(fileinfo.st_mtime))
print("最后一次状态变化时间:",formatTime(fileinfo.st_ctime))
执行上面的代码,将显示如图29所示的结果。
图29 格式化后的文件基本信息