1、理论知识
a.文件处理概念
a.文件的类型:音频、视频、照片、html、txt、word等等文件
b.文件的操作:打开文件,关闭文件,读取数据,写入数据
c.文件的作用:为了方便管理数据,为了存储数据,下次程序直接可调用
b.文件操作步骤
打开 open(文件的路径,访问模式)
读取数据(read),写入数据(write)
关闭(close)
注意:一定要记得关闭文件,避免占用资源
c.文件处理演示
f=open('test.txt','w')
f.write('xiaohuahua')
f.close() 输出结果:test.txt:xiaohuahua
2、open(文件的路径,访问模式)
a.文件的路径
a.相对路径:相对路径就是相对于当前文件的路径
./:代表当前目录的某个文件
f=open('./test.txt','w')
f.write('当前目录的某个文件写入内容')
f.close() 输出结果:test.txt:当前目录的某个文件写入内容
../:代表上级目录的某个文件
f=open('../class06/test1.txt','w')
f.write('上级目录的某个文件写入内容')
f.close() 输出结果:test.txt:上级目录的某个文件写入内容
b.绝对路径:文件或目录在磁盘上真正存储的路径
f=open(r'D:\com\VvipClass02\class07\test.txt','w')
f.write('绝对目录模式下写入文件')
f.close() 输出结果:test.txt:绝对目录模式下写入文件
b.访问模式
a.访问模式 r、w、a 最基础的操作 r+ w+ a+ 、rb wb ab
b.rwa示例
a.r
a.r 代表只读取数据,不能写入数据(写入数据报错)
f=open('test.txt','r')
print(f.read())
f.close() 输出结果:test.txt:r只能读取数据,不能写入数据
b.没有文件能读取数据吗?(不能)
f=open('non-existent.txt','r')
com=f.read()
print(com)
f.close() 输出结果:不能读取,报错
b.w
a.w代表只写入数据,不能读取数据(读取数据报错)
f=open('test.txt','w')
f.write('ttttttt')
f.close() 输出结果:test.txt:w只能写入数据,不能读取数据
b.没有文件能写入数据吗?(能)
f=open('non-existent.txt','w',encoding='utf-8')
f.write('w写入数据,会覆盖原有的内容,没有文件,会创建文件写入数据')
f.close() 输出结果:test.txt:w写入数据,会覆盖原有的内容,没有文件,会创建文件写入数据
c.乱码原因解决策略
乱码原因:写入的方式gbk,pycharm读取的时候是utf-8读取
解决策略:让读取写入的方式一致
c.a
a.a代表只追加数据
f=open('text.txt','a')
f.write('a往内容后面添加内容')
f.close() 输出结果:test.txt:a往内容后面添加内容
b.没有文件能追加数据吗?(能)
f=open('non-existent.txt','a')
f.write('a往内容后面添加内容')
f.close() 输出结果:non-existent.txt:a往内容后面添加内容
c.rwa和r+w+a+
a. r:r 表示只可读不可写(写入数据报错),没有文件不能读取
b.w:w 表示只可写不可读(读取数据报错),没有文件也能读取(写会覆盖原有的内容)
c.a:a 表示仅追加数据,没有文件也能追加
d.r+:r+ 表示即可读又可写(在r的基础上增加了写入),没有文件不能读取
e.w+:w+ 表示即可写又可读(在w的基础上增加了读取),没有文件也能读取(写会覆盖原有的内容)
f.a+:a+ 表示仅追加数据,没有文件也能追加
d.rb wb ab二进制文件
a.二进制文件:用txt不能打开的就是二进制文件
b.文本文件:用txt能打开的就是文本文件
e.读取文件的操作
a.read():读取整个文件
f=open('test.txt','r')
print(f.read())
输出结果:
test.txt文件内容:
aa
bb
b.readline():每次读取一行数据
f=open('test.txt','r')
print(f.readline())
输出结果:
test.txt:
aa
c.readlines():一次性读取所有内容,并且放在列表中
f=open('test.txt','r')
print(f.readlines())
输出结果:
test.txt:
['aa\n', 'bb']
f.读取文件的方式
with open(路径,模式) as 变量名:
代码块
with open('test.txt','r') as f:
print(f.read())
输出结果:
test.txt
aa
bb
3、文件和文件夹的操作
a.os模块:提供了很多方法去处理和操作文件目录 导包(import os)
b.创建文件夹(创建同名文件夹无法创建)
file1=r'D:\com\VvipClass02\class07\aa'
os.mkdir(file1)
输出结果:
若aa文件夹不存在,创建成功
若aa文件夹已存在,创建失败
c.删除文件夹(只有目录是空的就能删除)
file1=r'D:\com\VvipClass02\class07\aa'
os.rmdir(file1)
输出结果:
若aa文件夹目录已为空,删除成功
若aa文件夹目录不为空,删除成功
d.删除文件夹(即便目录非空的也能删除)
file1=r'D:\com\VvipClass02\class07\aa'
import shutil
shutil.rmtree(file1)
输出结果:若aa文件夹目录不管为空还是不为空,删除成功
e.文件重命名
os.rename('test1.txt','test2.txt')
os.rename('aa','bb')
输出结果:
test1.txt已修改为:test2.txt
aa文件夹已修改为:bb
f.获取当前路径的文件夹绝对路径:
print(os.getcwd())
输出结果:D:/com/VvipClass02/class07
g.获取当前路径的绝对路径
print(os.path.abspath(__file__))
输出结果:D:/com/VvipClass02/class07/demo07.py
h.__file__当前文件的路径
print(__file__)
输出结果:D:/com/VvipClass02/class07/demo07.py
i.当前路径的父目录:os.path.dirname()文件名
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
b=os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))),'config')
print(b+'\conf.ini')
输出结果:D:/com/VvipClass02/config\conf.ini
j.判断是否为目录
f=r'D:\com\VvipClass02\config'
print(os.path.isdir(f))
输出结果:True
k.判断是否为文件
f=r'D:\com\VvipClass02\config'
print(os.path.isfile(f))
输出结果:Flase
l.获取文件权限 os.access(path,mode)
F_OK(是否存在),R_OK(可读) w_ok(可写) X_OK(可执行)
file2=r'D:\vip\vvipclass01\class07\test.txt'
print(os.access(file2,os.F_OK)) 输出结果:true
print(os.access(file2,os.R_OK)) 输出结果:true
print(os.access(file2,os.W_OK)) 输出结果:true
print(os.access(file2,os.X_OK)) 输出结果:true
4、正则表达式
a.它用来处理字符串 特点:灵活性特别强
b.匹配规则
\d 匹配数字 \D
\w字母,数字,下划线,中文
.匹配任意字符,除\n以外
{}前面的元素出现的次数
?非贪婪模式 匹配1个或者0个表达式
+匹配1个或者多个表达式
*匹配0个或者多个表达式
c.导入相关包:import re
d.常用的方法
match()只匹配开头
search()只匹配一次
findall()全匹配
e.匹配示例:str1='123.,.,.,wowo?开始123'
a.仅把数字匹配出来,若没匹配出来会是一个none (group():分解)
a=re.match('\d+',str1).group() print(a) 输出结果:123
a=re.search('\d+',str1).group() print(a) 输出结果:123
a=re.findall('\d+',str1) print(a) 输出结果:['123', '123']
b.仅匹配字母,数字,下划线和中文,其他不匹配
a=re.findall(r'\w+',str1) print(a) 输出结果:['123', 'wowo', '开始_123']
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现