怎么拥有网站的所有权,建设银行广西分行网站,wordpress 加上index,山东建设工程招标网官方网站一、文件操作 1.数据持久化#xff08;数据本地化#xff09; -- 将数据保存在硬盘
程序中的数据默认是保存在运行内存中的#xff0c;保存在运行内存中的数据在程序运行结束后会自动释放。如果希望在程序结束后#xff0c;数据仍可以使用数据本地化 -- 将数据保存在硬盘
程序中的数据默认是保存在运行内存中的保存在运行内存中的数据在程序运行结束后会自动释放。如果希望在程序结束后数据仍可以使用就必须把数据保存在硬盘中。硬盘中的数据除非人为删除或者硬盘损坏否则数据会一直存在。如果想要把数据保存到硬盘中必须把数据保存到文件中文件是硬盘保存数据的基本单位 2. 常见的数据持久化工具
数据库文件(.db .sqlite) 、json文件、plist文件、txt文件、excel文件、 csv文件 3. python如何做数据持久化 -- python如何将程序中数据保存到文件中、如何获取文件中的数据到程序中使用 1.文件操作 ------ 操作文件内容 2. 文件操作基本步骤 第一步打开文件 第二步操作文件内容读写操作 第三步关闭文件
4.文件如何操作
1. 打开文件 语法open(file,mode r, *, encodingNone) -- 以指定方式打开指定文件a. file --- 字符串需要打开的文件路径文件路径可以写绝对路径也可以写相对路径1. 绝对路径 文件在计算机的全路径windows是从盘名开始写mac或者linux从系统根目录或者用户根目录开始写open(r/c:/names/users/abc/files/a.txt) #r 是电脑一般斜杠是反的 所以r确保斜杠对路径名需要引号框起来2.相对路径 如果使用相对路径必须先将需要打开的文件直接或者间接放在项目里a. 用 .开头 .表示当前目录当前代码文件所在文件夹open(./files/data.txt) 相对路径如果以 ./开头./可以省略b. 以 ..开头 用..表示当前目录上次目录b. mode 字符串文件的打开方式 -- 决定打开文件后能做什么读写决定操作文件的时候对应的数据的数据类型根据mode的功能他的值有两组1. 第一组值 - 决定打开文件后能干什么读还是写r - 只读w - 只写在打开文件时会清空文件内容aappend mode - 只写在打开文件的时候会保留文件内容注意 以读的方式打开一个不存在的文件程序会报错以写的方式打开不存在文件不会报错 且会自动创建这个文件2. 第二组值 -- 决定操作文件的时候对应的数据的数据类型t -text mode默认值 - 读写数据必须是字符串b - 读写数据必须是字节bytes (一般是视频、音频、图片非文本文件只能用b方式打开)注意 给mode 赋值时候必须在两组值中每一组中选择一个第二组值不选表示选t两组值顺序不影响c. encoding 编码方式 1.gbk 只支持英文、中文、韩文和日文编码英文是单字节编码用双字节存储一个中文字符2.utf-f: 支持所有语言用三个字节存储一个中文字符3.8bit 1bytes 1kb 1024bytes 1mb 1024kb 1G 1024mb不同文本文件编码方式在保存同一个字符的编码值的时候采用字节数可能不同使用文本文件编码方式的基本原则将数据写入文件时使用的编码方式必须和读文件中内容时采用编码方式一致open(/Users/yaoxin/Documents/afile.txt ) #绝对路径
open(./afile1.txt) # afile1 和 我这个代码文件同级所以直接当前目录就可以 ./也可以省略
open(../day03/afile1.txt) #当前代码文件上一级是week03week03/day03/afile1f open(afile1.txt,r)
f.read()
f.write(phth) #会报错因为现在是r只读模式f open(afile1.txt,a)
f.read() #报错现在是append mode 模式
f.write(python) 只写且会在原文件内容后添加f open(afile1.txt,w) # 打开时原文件内容会被清空如果文件不存在会自动创建f open(afile1.txt,rt)
result f.read()
print(type(result)) # strf open(afile1.txt,rb)
result f.read()
print(type(result)) # bytes1.1 自动关闭(with open)
with open(../day03/afile1.txt,r,encodingutf-8) as f:print(f.read()) 2. 文件读操作 a. 文件对象.read() --- 获取整个文件内容,并返回从文件读写位置开始读到文件结束文件读写位置默认在文件开头 读取一次后再赋值再read是没结果的。 需要重新open一次或者移动光标到开头用seek(0), 下面是事例
f open(afile1.txt, rt,encodingutf-8)
result f.read()
print(result)## 这样再赋值无结果
result1 f.read()
print(result1) # 再open一次可以再输出
f open(afile1.txt, rt,encodingutf-8)
result f.read()
print(result)#或者seek0 移动到开头f.seek(0)
result1 f.read()
print(result1) b. 文件对象.readline() --- 读取一行内容
f open(afile1.txt, rt,encodingutf-8)
#result f.readline()
print(f.readline()) #hellohello世界hello世界hello世界hello世界hello世界hhellohello
print(f.readline()) #dfdfdfdf的大方大方
print(f.readline()) #print(f.readline())练习循环打印afile1 所有内容
f open(afile1.txt, rt,encodingutf-8)
while True:result f.readline()print(result)if not result:break
3. 文件写操作 文件对象. write(内容)
f open(afile1.txt, wt,encodingutf-8)
f.write(你好世界)
4. 关闭文件
文件对象.close( )
f open(afile1.txt, r,encodingutf-8)
print(f.read())f.close()
已经关闭的文件不能再进行读写操作 二. 应用
1. 如何实现程序中的数据持久化
第一步确定需要做持久化的数据是什么第二步确定保存数据的文件( 文件叫什么名字、文件类型、文件位置、文件的初始内容是什么)第三步做到在程序中需要这个持久化数据的时候从文件中去读这个数据当这个数据变化的时候需要把最新的数据更新到文件中。
案例 写程序打印程序启动的次数
#count.txt 的内容就是0
#获取保存在文件中上一次程序的启动次数
f open(count.txt,r,encodingutf-8)
count int(f.read()) #count 文件里就只有一个0读取他出来
f.close()count 1
print(count)# 将最新的次数更新到文件中
f open(count.txt,w, encodingutf-8)
f.write(str(count)) #count 是int 要转换成 str才可以写入
f.close() 练习
# 练习1写程序录入学生的名字录入完后打印目前已经录入过的所有的学生的名字(每次运行程序只录入一个) 请输入学生的名字:小名 小名 请输入学生的名字: 张三 小名 张三
请输入学生的名字: 李四 小名 张三 李四 ...
录入学生的名字录入完后打印目前已经录入过的所有的学生名字
student_name input(请输入学生的姓名)
file1 open(afile1.txt,at,encodingutf-8)
file1.write(student_name)需要持久化的数据是所有录入学生的姓名txt文件可以保存名字
# 练习2写程序录入学生的名字录入完后打印目前已经录入过的所有的学生的名字但是每个名字只能录入一次
student_name input(请输入学生的姓名)# 读取文件内容
file1 open(afile1.txt, rt, encodingutf-8)
file1_content file1.read()
file1.close()if student_name in file1_content:print(名字已经存在)
else:file1 open(afile1.txt, at, encodingutf-8)file1.write(student_name )file1.close()print(名字已添加到文件中)# 重新读取文件内容并打印
file1 open(afile1.txt, rt, encodingutf-8)
updated_content file1.read()
file1.close()
print(updated_content) 三. 正则表达式 1. 正则表达式的定义 正则表达式是一种可以让复杂的字符串问题变得简单的工具不管通过正则表达式解决的是什么样的字符串问题写正则表达式都是在描述字符串规则
2.python中正则相关的基本工具 re模块 -- 是python自带的模块这个模块中提供了各种各样和正则相关的函数 fullmatch函数 fullmatch(正则表达式 字符串) --- 判断整个字符串是否符合正则表达式所描述的规则如果不符合结果为None, 符合结果是匹配对象 python中正则表达式写法 r‘正则表达式内容’
3.正则符号
1. 普通符号 在正则表达式中表示符号本身符号就是普通符号
result fullmatch(rabc,abc)
print(result)
2. ‘ . ’ 匹配任意一个字符长度也需要匹配
# . 表示任意字符 就是说第一个随便是什么后面两个是 bc 就行长度也要匹配
result fullmatch(r.bc,kbc)
print(result)result fullmatch(r..bc..,abbcld)
print(result)
3. ‘ \d ’ 匹配任意一个数字字符 digit
result fullmatch(r\dbc,9bc)
print(result)#任意三个数字字符
result fullmatch(r\d\d\d,365)
print(result)4. \s 匹配任意一个空白字符包括空格、\n \t
result fullmatch(r\d\s\d,2\n5)
print(result)
5. \w 匹配任意一个数字、字母、下划线或中文
result fullmatch(r1\w3,1是3)
print(result)
6. \D 、 \S 、\W
\D 匹配任意一个非数字字符\S : 匹配任意一个非空白字符\W : 匹配任意一个非数字、字母、下划线或着中文
7. [字符集] --- 匹配在字符集中的任意一个字符
result fullmatch(r1[abc]2,1c2)
print(result)
匹配abc 中任意一个字符都可以[\dMN] 匹配任意一个数字和MNra[3-9]b a和b 中间 3-9中任意一个 r‘1[a-zA-Z]2’ , 1和2 之间是任意一个小写或大写字母 加空格的话就是或的意思r1[\da-fMN]3 , 三个字符中间的可以是数字也可以是a-f的任意一个或者MN
8. [^字符集] --- 匹配不在字符集的任意字符
r1[^a-z]2 1和2之间不是小写字母