高级文件操作

news2024/11/17 12:54:15

自学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()函数获取文件的基本信息。

图标 (35)

  实例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  格式化后的文件基本信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1799919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型在信用卡行业的应用探索

2022年11月,OpenAI发布ChatGPT3.5,迅速引起各界广泛关注,引发了人工智能领域新一轮发展热潮。ChatGPT作为一款基于人工智能技术的大语言模型(LLMs),在文本生成、对话理解、多领域知识覆盖等方面具有卓越表现…

【JVM】从编译后的指令集来再次理解++i和i++的执行顺序

JVM为什么要选用基于栈的指令集架构 与基于寄存器的指令集架构相比,基于栈的指令集架构不依赖于硬件,因此可移植性更好,跨平台性更好因为栈结构的特性,永远都是先处理栈顶的第一条指令,因此大部分指令都是零地址指令&…

走进三态股份,睿观与三态股份的预防商标侵权合作

三态股份是去年上市的大型跨境电商卖家(深交所股票代码:301558),致力于通过最新的科技,将国内的优质供应链输送到全球各地。 三态股份每年上新的产品超十万级,可却遇到了侵权违规的巨大挑战:如…

探索k8s集群的配置资源(secret和configmap)

目录 ConfigMap ConfigMap(主要是将配置目录或者文件挂载到k8s里面使用) 与Secret类似,区别在于ConfigMap保存的是不需要加密配置的信息。(例如:配置文件) ConfigMap 功能在 Kubernetes1.2 版本中引入&…

谈AI 时代网站的未来趋势

以大语言模型为代表的AI 技术迅速发展,将会影响原有信息网络的方式。其中一个明显的趋势是通过chatGPT 对话代替搜索引擎和浏览器来获取信息。 互联网时代,主要是通过网站(website)提供信息。网站主要为人类阅读的方式构建的。主要…

鸿蒙轻内核M核源码分析系列十九 Musl LibC

LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Musl LibC的实现代码。文中所涉及的源码,均可以在开源站点 https://gitee.com/openharmony/kernel_liteos_m 获取。LiteOS-M内核提供了和内核相关的…

范闲获取到庆帝与神庙的往来信件,用AES进行破解

关注微信公众号 数据分析螺丝钉 免费领取价值万元的python/java/商业分析/数据结构与算法学习资料 在《庆余年2》中,范闲与庆帝和神庙之间的权谋斗争愈演愈烈。一次偶然的机会,范闲从庆帝的密室中获取到几封与神庙往来的密信。然而,这封信件…

jvm学习笔记(二) ----- 垃圾回收

GC 一、判定对象是否是垃圾1.引用计数法2.可达性分析算法 二、垃圾回收算法1.标记清除2.标记整理3. 复制4. 分代垃圾回收1.尝试在伊甸园分配2.大对象直接晋升至老年代3.多次存活的对象4.老年代连续空间不足,触发 Full GC 链接: jvm学习笔记(一) ----- JAVA 内存 链接…

20240607每日通信--------VUE3前端引入scoket-io,后端引入Netty-SocketIO,我成功了,希望一起交流沟通

无语 前置: VUE3 前端集成scoket-io socket.io-client Sringboot 3.0JDK17集成Netty-SocketIO Netty-SocketIO 失败原因一: 前期决定要写demo时候,单独了解了,后端引入Netty-SocketIO注意事项,详见我先头写的博客 前…

别让你的品牌失去声音,品牌策划如何成为你的王牌?

品牌策划可不仅仅是一个简单的概念,它是一门真正的艺术和科学。 它涉及到在确立品牌定位之后,进行一系列精心设计的传播和推广活动,从而塑造和管理品牌,让品牌价值达到最大化。 在这个竞争激烈的市场中,想要让你的品…

一篇文章带你搞懂C++引用(建议收藏)

引用 6.1 引用概念 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。 比如:李逵,在家称为"铁牛",江湖上人称&quo…

30、matlab现代滤波:维纳滤波/LMS算法滤波/小波变换滤波

1、信号1和信号2的维纳滤波 实现代码 N 2000; %采样点数 Fs 2000; %采样频率 t 0:1 / Fs:1 - 1 / Fs; %时间序列 Signal1 sin(2*pi*20* t) sin(2*pi*40* t) sin(2*pi*60* t); Signal2[2*ones(1,50),zeros(1,50),-1*ones(1,100),zeros(1,50),-2*ones(1,50),zeros(1,50),1…

删除目录

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 删除目录可以通过使用os模块提供的rmdir()函数实现。通过rmdir()函数删除目录时,只有当要删除的目录为空时才起作用。rmdir()函数的基本语…

升级最新版openssh-9.7p1及openssl-1.1.1h详细步骤及常见问题总结

近期因为openssh相继被漏洞扫描工具扫出存在漏洞,所以考虑升级操作系统中的openssh和openssl为最新版本,来避免漏洞风险。期间的升级过程及遇到的疑难问题,特此记录下来,供有需要的人参考。 本次目标是升级 openssh 为 9.7p1 版本…

算法金 | 不愧是腾讯,问基础巨细节 。。。

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 最近,有读者参加了腾讯算法岗位的面试,面试着重考察了基础知识,并且提问非常详细。 特别是关于Ada…

Linux守护进程揭秘-无声无息运行在后台

在Linux系统中,有一些特殊的进程悄无声息地运行在后台,如同坚实的基石支撑着整个系统的运转。它们就是众所周知的守护进程(Daemon)。本文将为你揭开守护进程的神秘面纱,探讨它们的本质特征、创建过程,以及如何重定向它们的输入输出…

vue2实现将el-table表格数据导出为长图片

方法一、 el-table数据导出为长图片 将el-table数据导出为图片不是一个直接的功能,但可以通过以下步骤实现: 使用html2canvas库将表格区域转换为画布(canvas)。 使用canvas的toDataURL方法将画布导出为图片格式(例如PNG)。 创建…

人工智能时代,想转型AI产品经理?这篇文章你不应该错过

前言 在这个日新月异的智能时代,人工智能(AI)已经从未来概念转变为推动各行各业发展的核心驱动力。作为连接技术与市场的桥梁,AI产品经理的角色愈发关键,他们不仅是技术的翻译者,更是创新的推动者。如果你…

ORA-12519 TNS:no appropriate service handler found

问题描述 jdbc连接Oracle失败,报错日志如下: Listener refused the connection with the following error: ORA-12519, TNS:no appropriate service handler found The Connection descriptor used by the client was:192.9.100.217:7001:wcm 问题分…

重新学习STM32(2)NVIC

概念简介 NVIC,即嵌套向量中断控制器,控制着中断相关的功能,是内核里面的一个外设。 中断在单片机编程中的作用是使单片机能及时响应需要立即处理的事件,但是这些事件也分紧急和非紧急,因此需要优先级来区分。…