Python 从入门到实战30(高级文件的操作)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。

上篇文章我们讨论了操作目录的相关知识。今天我们将学习一下高级文件操作的相关知识。

python 内置的os 模块除了可以对目录进行操作,还可以进行一些文件的高级操作。

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) | 将文件或者目录修改为dst |
| stat(path) | 返回path指定的文件信息 |
| startfile(path,operation) | 使用关联的应用程序打开path指定的文件 |

1、删除文件

python 中删除文件可以使用os模块提供的函数。

语法:os.remove(path)

其中path -----是要删除的文件路径,可以是相对路径或者绝对路径

举例说明;

import os #导入模块

def main():

if os.path.exists("test_fold.txt"): #判断是否存在文件

os.remove("test_fold.txt") #存在文件执行删除

else:

print("要删除的文件不存在!")

如上执行,因为开始没有文件,数据结果:

若是我们新建一个再执行删除,

import os #导入模块

def main():

test_fold = 'test_fold.txt'

if not os.path.exists(test_fold): #文件不存在,先新建文件

open(test_fold,'w')

else:

print("文件已经存在")

if os.path.exists(test_fold):

os.remove(test_fold)

print("删除文件了")

else:

print("要删除的文件不存在!")

输出结果:删除文件了

2、重命名文件和目录

重命名文件或者目录使用os模块提供的rename()函数,

语法参考:os.rename(src,dst)

其中 src -----要重命名的原文件或者目录

dst-----重命名后的文件或者目录

1)重命名文件举例

test_demo.txt 我们开始是由这个文件的。将其进行重命名:

import os #导入模块

def main():

src = r'D:\dewi\project2024\myListPractice\pythonProject1\test_demo.txt'

dst = r'D:\dewi\project2024\myListPractice\pythonProject1\test_demo1.txt'

if os.path.exists(src):

os.rename(src,dst) #存在文件就重命名

print("文件命名完毕")

else:

print("文件不存在")

输出参考:文件命名完毕

2)目录的命名

也是使用os.rename()函数,举例说明:

import os #导入模块

def main():

src = 'prc'

dst = "practice"

if os.path.exists(src):

os.rename(src,dst)

else:

print(f"文件:{src}","不存在")

第一次执行:如下图,看到文件夹被改变为practice

再次执行:就会提示文件不存在,因为已经被修改了

3、获取文件基本信息

在计算机上创建文件后,该文件会包含一些信息。如文件最后一次访问时间、最后一次修改时间、文件大小等。这些信息可以使用os模块中的stat()函数来获取。

os.stat(path)

参数说明:path 是要获取的文件基本信息的文件路径,可以是相对路径,也可以是绝对路径;

此函数的返回值是一个对象,其具有下表所示的属性,通过访问这些属性,就可以获取指定文件的基本信息。

stat()函数返回对象的常用属性:

|----------|-------------|----------|--------------------------------------------------------------|
| 属性 | 说明 | 属性 | 说明 |
| st_mode | 保护模式 | st_dev | 设备名 |
| st_ino | 索引号 | st_uid | 用户 ID |
| st_nlink | 硬链接号(被连接数目) | st_gid | 组 ID |
| st_size | 文件大小,以字节为单位 | st_atime | 最后一次访问时间 |
| st_mtime | 文件最后一次修改时间 | st_ctime | 最后一次状态变化的时间,操作系统不会,该属性对应的结果也不同,例如在 Windows 操作系统下返回的就是文件的创建时间 |

举例说明:

import os #导入模块

def main():

fileinfo = os.stat("test_data.txt")#获取文件基本信息

#下面输出文件基本信息

print("索引号:", fileinfo.st_ino)

print("设备名称:", fileinfo.st_dev)

print("文件大小:", fileinfo.st_size, "字节")

print("最后一次访问时间:", fileinfo.st_atime)

print("最后一次修改时间:", fileinfo.st_mtime)

print("最后一次状态变化的时间:", fileinfo.st_ctime)

输出结果参考:

查看上面的输出结果,看到时间有点看不懂,可以转换一下:

#时间转换函数:def formatOuttime(longtime):
*'''*时间进行格式化
:param longtime:
要格式化的时间
:return:
返回日常使用的时间
'''
import time
return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(longtime))

def main():

fileinfo = os.stat("test_data.txt")#获取文件基本信息

#下面输出文件基本信息

print("索引号:", fileinfo.st_ino)

print("设备名称:", fileinfo.st_dev)

print("文件大小:", fileinfo.st_size, "字节")

print("最后一次访问时间:", formatOuttime(fileinfo.st_atime))#调用函数进行时间格式化输出

print("最后一次修改时间:", fileinfo.st_mtime)

print("最后一次状态变化的时间:", fileinfo.st_ctime)

输出结果参考:

4、补充一个小知识-输出带有字符串的变量

#输出带有字符串的变量方法:
#1、使用f - string

name = "Alice"

print(f"Hello, {name}!")

2、使用str.format() 方法

name = "xiaomi"

print("Hello, {}!".format(name))

#3、在字符串中使用 + 连接符来拼接变量

name = "小明"

print("Hello, " + name + "!")

#4、使用 % 操作符 (较老的方式,Python 2风格)

name = "xiaohua"

print("Hello, %s!" % name)

输出参考:

Hello, Alice!

Hello, xiaomi!

Hello, 小明!

Hello, xiaohua!

今天先写学习到这里了,每天进步一点点。明天也要加油啊!

相关推荐
Thomas_Cai10 分钟前
Python后端flask框架接收zip压缩包方法
开发语言·python·flask
亚图跨际32 分钟前
Python和R荧光分光光度法
开发语言·python·r语言·荧光分光光度法
谢眠1 小时前
深度学习day3-自动微分
python·深度学习·机器学习
z千鑫1 小时前
【人工智能】深入理解PyTorch:从0开始完整教程!全文注解
人工智能·pytorch·python·gpt·深度学习·ai编程
MessiGo1 小时前
Python 爬虫 (1)基础 | 基础操作
开发语言·python
肥猪猪爸2 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
LZXCyrus2 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
Enougme2 小时前
Appium常用的使用方法(一)
python·appium
懷淰メ2 小时前
PyQt飞机大战游戏(附下载地址)
开发语言·python·qt·游戏·pyqt·游戏开发·pyqt5