python: 文件与文件夹操作
python:文件处理
一、文件的基本概念
1、什么是文件
内存中存放的数据在计算机关机后就会消失(临时存储)。要长久保存数据,就要使用硬盘、光盘、U盘等设备。为了便于数据的管理与检索。引入了“文件”的概念。
一篇文章,一段视频,一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。一般来说,文件可分文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。
2、文件操作包括哪些内容呢
在日常生活中,文件操作主要包括打开、关闭、读、写、备份等操作。
3、文件操作的作用
文件操作的作用就是把一些内容(数据)存储存放起来,可以让程序下一次执行的时候使用,而不必重新制作一份,省时省力。
- 简单来说就是实现数据持久化保存。
二、文件操作三步走
① 打开文件 ② 读写文件 ③ 关闭文件
1、open()函数打开文件
open(name, mode)
name : 代表要打开的文件路径 + 名称
mode :代表访问模式,目前记住三种 => r/w/a
r : read,只读模式,代表只能对文件进行读取,属于默认模式,如果要访问的文件不存在,则直接报错。
w : write,只写模式,代表只能对文件进行写入操作,如果访问的文件不存在,则系统会自动报错,但是写入文件时,它首先对文件内容进行清空,然后再写入新的内容。
a :append,追加模式(只写模式的一种),与w类型,如果访问的文件不存在,也可以自动创建该文件。但是在写入数据到文件的时候,并不会清空文件原有的内容。
② 写内容到文件中 => f.write(content) =>f.write()只能把字符串类型的数据写入文件中
③ 关闭文件(因为文件打开后需要占用计算机资源)
注意:open()方法操作之后,返回的是一个文件对象(文件句柄)以后的读写都需要依赖这个对象(句柄)
- w:清空原有文件内容 a : 追加新的内容
# 打开文件
f = open('python.text', 'w') # 同级文件,在同一路径下
# 写入内容
f.write('Life is short , I study python!')
# 关闭文件
f.close()
三、解决中文乱码问题
乱码的原因:大多编程语言都是老外开发的,对中文的支持不太好,最早美国搞出了一套编码格式 :ASCII =>一个字节 =>8bit 主要能表达255个字符(主要包括了0-9,a-z,A-Z,老外字符)
随着编程语言和互联网的发展,编程语言传入了国内,发现255个字符根本装不了中文,所以就会产生所谓的乱码。
中国推出了自己的编码格式:GB2312(255个字符+汉字支持)=>更新=>GBK
国际组织:编码标准unicode => UTF - 8
- 在打开文件时,添加参数encoding = 'utf - 8'
# 打开文件
f = open('python.text', 'w', encoding = 'utf - 8') # 同级文件,在同一路径下
# 写入内容
f.write('人生苦短,我学python!')
# 关闭文件
f.close()
四、文件读取三步走
① 打开文件 ② 读取文件 ③ 关闭文件
读取文件的三种方法:
1、read(): 读取文件的所有内容,可以添加一个参数size,代表读取字符的长度
2、readlines():一次读取文件的所有内容,返回结果是一个列表,列表中的每一个元素都是文件中的一行
3、readline():一次读取文件的一行,读取一次向后移动一次,直到文件读取完毕,通常配合while True使用
1、read()
f = open('python.text', 'r', encoding='utf -8')
# content = f.read() # 代表读取文件的所有内容
content = f.read(1) # size = 1 代表读取文件的一个字符
print(content)
f.close()
2、readlines
f = open('python.text', 'r', encoding='utf -8')
content = f.readlines()
print(content)
f.close()
- 只适合读取小文件,因为readlines一次读取文件,大文件容易卡死
3、readline
f = open('python.text', 'r', encoding='utf - 8')
while True:
content = f.readline()
print(content, end='')
if not content: # 如果content内容为空则为True,退出循环 content = '' 则not '' = True
break
五、文件访问模式(mode参数)
r : 只读
w :只写
a :追加
以上r、w、a只针对文本文件(.txt)
+ 代表既可以读取又可以写入
b : binary缩写形式,以二进制流的方式读取文件或写入数据到文件中
rb
wb
ab
以上rb、wb、ab不仅可以针对文本文件,还可以针对图片文件、音频文件、视频文件进行读写操作
又由于二进制底层是通过0101读取的,所以不能设置编码格式,否则会报错!
案例之文件备份:
- 介绍个字符串查找的方法:rfind()
rfind():从左向右查找,返回这个关键字在最后一次出现的位置
"""
需求:用户输入当前目录下的任何文件名,完成对该文件的备份功能,(备份文件命名为XX[备份]后缀,例如:(test[备份].txt)
分析:
1、提示用户输入并接收
2、文件名称的变化
3、内容完全拷贝过来
"""
filename = input('请您输入当前目录下要备份的文件名称:')
file1 = open(filename, 'rb') # rb模式不仅仅限制为文本文件
num1 = filename.find('.')
rename = filename[:num1] + '[备份]' + filename[num1:]
file2 = open(rename, 'wb') # 二进制不能不能使用编码模式
while True:
content = file1.readline()
if not content:
break
file2.write(content)
'''
# 与上述的效果一致 设置为每次只读取1kb,防止程序卡死
while True:
content1 = file1.read(1024) # 当mode为r模式时候,size为字符,当为rb模式时,size代表字节大小 1024= 1kb
if not content:
break
file2.write(content1)
'''
file1.close()
file2.close()
六、文件与文件夹的操作
在python中文件与文件夹的操作要借助os模块里面的相关功能
文件操作之os模块相关函数:
编号 | 函数 | 功能 |
---|---|---|
1 | os.rename(目标文件名称,新文件名称) | 对文件进行重新命名操作 |
2 | os.remove(要删除文件的名称) | 对文件进行删除操作 |
3 | os.path.exists(目标文件名称) | 判断文件是否存在 |
import os
if os.path.exists('python1.txt'):
os.rename('python1.txt', 'python2.txt')
os.remove('python2.txt')
文件夹操作之os模块相关函数:
编号 | 函数 | 功能 |
---|---|---|
1 | os.mkdir(新文件夹名称) | 创建一个指定名称的文件夹 |
2 | os.getcwd() | current work directory ,获取当前目录的绝对路径 |
3 | os.chdir() | change directory ,切换目录 |
4 | os.listdir() | 获取指定目录下的文件信息,返回列表 |
5 | os.rmdir() | 用于删除指定名称的 ’‘空’‘ 文件夹 |
- 这是针对目录(文件夹)的操作
"""
准备一个static文件夹以及file1.txt、file2.txt、file3.txt三个文件
1、在程序中,将当前目录切换到static文件夹
2、创建一个新images文件夹以及test文件夹
3、获取目录下的文件
4、移除test文件夹
"""
import os
# 获取当前目录的文件位置
print(os.getcwd())
# 切换当前工作目录为static文件夹
os.chdir('static')
os.chdir('E:\pythonProject1\day11\static') # 效果与上等同,都是在E:\pythonProject1\day11下执行
print(os.getcwd())
# 在当前工作目录下创建images与test文件夹
if not os.path.exists('images'): # 当前工作目录下,如果文件夹images不存在,则创建一个images文件夹
os.mkdir('images')
if not os.path.exists('test'):
os.mkdir('test')
# 创建指定工作路径的文件夹images1
if not os.path.exists('E:\pythonProject1\day11\images1'):
os.mkdir('E:\pythonProject1\day11\images1')
# 获取指定目录下的文件信息
print(os.listdir('E:\pythonProject1\day11\static'))
# 移除test文件
os.chdir('images') # 切换到images目录下,images目录下没有test文件夹,无法执行删除test文件
os.chdir('E:\pythonProject1\day11\static') #需要切换到当前工作目录下
os.rmdir('E:\pythonProject1\day11\images1') #要么添加位置路径
if os.path.exists('test'):
os.rmdir('test')
需要注意事项:
返回上一级目录: os.chdir('..')
在static目录下,并不能直接切换到text1目录下
- 在同级目录的情况下,不能直接切换目录,需要先返回上一级目录,也可以使用绝对路径切换目录
os.chdir('E:\pythonProject1\day11\static')
非空文件夹的删除(递归删除,慎重使用)
# 导入shutil模块
import shutil
# 递归删除文件夹
shutil.rmtree('要删除文件夹路径')
递归删除文件夹的原理:理论上,其在删除过程中,如果文件夹非空,则自动切换到文件夹的内部,然后把文件夹内部的文件一个一个删除,当所有文件删除完毕之后,返回到上一级目录,删除文件夹本身。
七、与文件相关的路径问题
绝对路径:
绝对路径:从盘符(C盘、D盘、E盘)一级一级向下访问,直到访问到需要的文件 => 绝对路径
如:E:\pythonProject1\day11 => E:/pythonProject1/day11 使用斜杆/代替反斜杠\
因为在字符串中,\反斜杠代表转义字符
缺点:不方便后期代码的迁移,把代码上传到linux服务器上面
相对路径:
相对路径:就是有着一个参考点,这个参考点就是代码文件本身
在该项目中,其他文件一般与代码文件本身有三个关系:
1、同级关系(平行关系):同级的访问直接使用 ./文件名称 或 文件名称
2、上级关系:(比如在上述中,我们把代码切换到static目录下,在static目录中,与外部的python.txt就是上级关系,可以使用 ../文件名称 来访问上级文件 ../../就是上级的上级
3、下级关系:就是我们要访问的文件,在同级目录的下面,这种就称为下级关系 => 同级文件夹名称/文件名称
# 同级访问
f = open('python.txt', 'r')
f.close()
# 上级访问
os.chdir('static') # 先切换到static文件夹目录下
file1 = open('../python.txt')
file1.close()
# 下级访问
print(os.getcwd())
file2 = open('../python.txt')
file2.close()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」