01-file operations 文件操作
02-modify the read position 修改读取的位置
03-file write operation 文件写操作
04-binary file operation 二进制文件操作
05-json file json文件
06-student information persistence 学生信息持久化
07-exception catching 异常捕获
01-file operations 文件操作
文件:都有后缀,不同的后缀表示不同的存储方式(保存数据--永久的)
文本文件(存文字信息) -----.txt, .word, .md等
二进制文件:视频、音频、图片-----.mp4, ,.mov, .mp3, .png, .jpg, .gif
可执行文件等:-----.exe, .api, .dmg等
文本文件、二进制文件、json文件(重点)的操作
文件操作:对文件进行读写操作
步骤:(对所有文件操作有效)
1.打开文件
2.对文件进行读/写操作(读:获取文件内容;写:修改文件内容)
3.关闭文件
python操作文件:
1.1.打开文件
open(文件路径,打开的模式 = 'r')
open函数有一个返回值:返回的就是被打开的文件句柄对象
文件句柄:就是文件的代言人,对文件句柄对象进行的操作,就相当于对文件进行操作
文件路径:文件在电脑中对应的地址
1.1.1.直接写全路径(不推荐使用)
1.1.2.一般将涉及到的文件放到工程中:
a.文件和代码对应的.py文件在一个目录下,路径直接写文件名
b.在工程文件夹下,但是不直接和代码文件在一个目录里面:./放文件的文件夹名字/文件名
打开的模式:
'r'->文本读(以读的形式打开,只能获取内容,不能修改内容)
'w'->文本写(以写的形式打开,只能修改内容,不能获取内容;会覆盖原来的内容)
'a' ->文本写(以写的形式打开,只能修改内容,不能获取内容;会加到原来内容后面)
'br'->二进制读
'bw'->二进制写
'ba'->二进制写
1.2.文本文件
a.打开文件
f:就是被打开的文件对应的文件句柄
utf-8:一种文本编码方式,就是使用1-6个字节对unicode进行编码;utf-8就可以编码所有国家的语言对应的字符的文本
gbk:只支持中文文本编码
f = open('./test/test.py','r')
g = open('./test/test2.txt', 'r', encoding='utf-8')
b.读操作
注意:对同一个文件句柄对象进行读操作,每读一次内容,下次再读的时候,从上次读的结束对位置往下读
read():获取文件中所有的内容,并且返回
文本文件读取的结果是字符串
result = f.read()
print(result)
# result2 = g.read()
# print(result2)
read(n):n->指定读取的文本长度(-1:读全部内容,n大于长度:读取所有内容)
# result2 = g.read(10)
# print('===',result2)
readline():每次读一行内容
# result3 = g.readline(1)
# print('>>>',result3)
练习:1.读取指定文件的所有内容 2.读取指定文件所有内容(一行一行的读)
# 1.
# re = g.read()
# print(re)
# 2.
while True:
re = g.readline()
# if re == '':
# break
if not re:
break
print('>>',re)
# 关闭文件
g.close()
readlinse():让文件中每一行内容作为列表元素返回
g = open('./test/test2.txt', 'r', encoding='utf-8')
re = g.readlines()
print(re)
02-modify the read position 修改读取的位置
读写文件,每次读完或者写完,下次再读的时候,是接着上次读完的位置往下进行读操作
避免这个问题的方法:1.重新打开文件,然后再读 2.设置读写位置
f = open('./test/test2.txt', 'r', encoding='utf-8')
d读取文件中所有的内容,下次再读就是从文件结束的位置往下读
print(f.read())
seek(偏移量):偏移量是字节数(一个字母是一个字节,一个中文汉字是两个字节)
设置读写位置为文件的开始:后边进行读操作的时候,就是从文件开始的位置往下读
注意:偏移量一般设置为0
f.seek(0)
print('>>>', f.read())
f.close()
03-file write operation 文件写操作
写操作(修改文件内容):
1.打开文件
2.写操作
3.关闭
f = open('./test/test2.txt', 'w', encoding='utf-8')
write(写的内容):文本文件中写的内容是字符串
注意:
'w'->写的时候会覆盖原文件的内容;
'a'->在原文件内容后面追加内容
f.write('举头望明月')
f.seek(0) # 后面写的时候,会以覆盖前面写的内容的形式去写
f.writelines(['aaaa', 'dgdsag', 'agag', ' satett'])
f.close()
04-binary file operation 二进制文件操作
4.1二进制文件的读
bytes类:python中的二进制数据对应的类型是bytes -->data
with open('王虎.jpg', 'br') as f:
data = f.read()
print(data)
print('>>>',type(data)) # value : >>> <class 'bytes'>
4.2二进制文件的写
'ba':无追加的效果
with open('./test/new.jpg', 'bw') as f:
# data需要时bytes类型的数据
f.write(data)
05-json file json文件
json文件 :就是后缀是.json的文件,用来存储文本数据(以特殊的语法结构来存储文本信息)
最外层要么是字典,要么是数组(列表)结构
里面的数据:字符串、数字、二进制、字典、数组(列表)
{} ->字典结构
{
'name':'a',
'age':21,
'sore':34
}
[]->数组(列表)结构
[
190,
'name',
'person':{'name':'a','age':21,'sore':34}
]
json文件的读写:python中使用python内置模块json来对json数据进行操作
import json
5.1读取json文件中的内容
json.load(f):读取的结果是字典(dict)或者列表(list)
with open('./test/ikang.json', 'r', encoding='utf-8') as f:
# data = f.read()
# print(type(data)) # value: <class 'str'> 字符串形式的值
result = json.load(f)
print(type(result)) #value:<class 'dict'> 这样输出的内容方便操作
print(result)
5.2json文件的写操作:
json.dump(写的内容,f):写的内容通常是字典或者列表
with open('./test/myjson.json', 'w', encoding='utf-8') as f:
dict1 = {
'name': 'a',
'age': 21,
'sore': 34
}
list1 = [
190,
'name',
'person',{'name':'a','age':21,'sore':34}
]
str1 = 'this is a normal string'
toupl1 = ('a', 100, 0, True)
json.dump(str1,f, indent=2, ensure_ascii=False) #indent= 2 -->字符缩进个数,使格式更清晰 ; ensure_ascii=False 是中文数据存到文件里依旧是中文
loads 字符串转换成python里的字典或列表格式
dumps python里的字典或列表格式转换成字符串
也可以存字符串 -->“this is a string ”
也可以存元组,-->在json文件里是列表[]
06-student information persistence 学生信息持久化
写一个添加学生多功能,将学生的信息持久化
1.添加学生
2.查看学生
import json
key_name = 'name'
key_age = 'age'
# all_students = {}
# 创建一个json文件,并取出字典,进行存储
try:
with open('student.json', 'r', encoding='utf-8') as f:
all_students = json.load(f)
except FileNotFoundError:
all_students = {}
# 输入学生信息
stu_name = input('请输入学生姓名:')
stu_age = input('请输入学生年龄:')
stu_dict = {
key_name:stu_name,
key_age:stu_age,
}
all_students[stu_name] = stu_dict
with open('student.json', 'w', encoding='utf-8') as f:
json.dump(all_students,f)
07-exception catching 异常捕获
在之前的学习中,由于各种原因,我们的代码会出现各种各样的错误
这些错误我们叫异常,如果程序出现异常,程序会崩溃,不能继续执行
但是,有的时候出现异常,我们可能希望由自己解决出现的问题,不希望程序崩溃,就可以捕获异常
捕获异常:
格式1:
try:
代码块1:需要捕获异常的代码块
except: # 所有类型错误的异常都会捕获
代码块2(出现异常后执行的代码块)
执行过程:先执行代码块1,如果执行代码块1的时候出现异常,就执行代码块2;
如果代码块1不出现异常,就执行try结构外的其他语句
# IndexError:
# FileNotFoundError:
# ValueError:
try:
print(int('12sd'))
# with open('./test/test1.json', 'r', encoding='utf-8') as f:
# pass
except:
print("出现异常了")
print('>>>')
格式2:出现指定类型错误的异常,才捕获
try:
代码块1
except 错误类型列表:
代码块2
try:
with open('./test/test1.json', 'r', encoding='utf-8') as f:
pass
print(int('abc'))
except FileNotFoundError:
print("出现文件找不到异常了")
# except ValueError:
# print('值错误异常')
finally:
print('不管有没有异常都有执行')
print('>>>')
格式3:输出异常内容
网友评论