文件介绍
1.
计算机只认识二进制
(
0 1
)
2.
⽂件中存储的数据都是以二进制
(
0 1
)
的形式去存储的
文件分为两种:
⽂本⽂件和二进制⽂件
文本文件
能够使⽤记事本软件打开
(
能够使⽤记事本转换为⽂字
)
txt, md, py , html, css, js , json
二进制文件
不能使⽤记事本软件打开的
exe, mp3, mp4, jpg, png
文件操作
打开文件
语法:open(file, mode='r', encoding=None)
参数 file:将要打开的文件,字符串类型,相对路径或绝对路径
参数mode:默认参数(缺省参数), 表示的是打开文件的⽅式
r: read 只读打开
w: write 只写打开
a:append
追加打开
, 在⽂件的末尾写⼊内容
参数encoding:编码方式,文字或二进制
gbk:
将⼀个汉字转换为
2
个字节⼆进制
utf-8:
常⽤
,
将⼀个汉字转换为
3
个字节的⼆进制
返回值
:
返回的是⽂件对象
,
后续对⽂件的操作
,
都需要这个对象读写文件
读写文件
写文件
对象
.
write
(
'
写⼊⽂件的内容
'
)
# 1, 打开⽂件
f = open('123.txt', 'w', encoding='utf-8')
# 2, 写⽂件
f.write('天天开心\n')
f.write('天天快乐')
# 3, 关闭⽂件
f.close()
读文件
对象.
read
(
n
)
参数n:表示读取多少字符,空代表读取全部内容
#读文件
# 1, 打开⽂件
f = open('123.txt', 'r', encoding='utf-8')
# 2, 读⽂件
aaa = f.read()
print(aaa) # ⽬前只是打印读取的内容,可以做其它的事
# 3. 关闭⽂件
f.close()
# r ⽅式打开⽂件 ,如果⽂件不存在,代码会报错
关闭文件
⽂件对象.close()
使⽤ with open 打开⽂件
with
open
()
打开⽂件的好处
:
不⽤⾃⼰去书写关闭⽂件的代
码, 会⾃动进⾏关闭
with open('123.txt','a',encoding='utf-8') as f:
f.write('woshi dage ')
按行读取文件内容
按⾏读取⽂件: ⼀次读取⼀⾏内容
⽂件对象
.
readline
()
with open('123.txt', 'r',encoding='utf-8') as f:
while True:
buf = f.readline()
if len(buf) == 0:
break
else:
print(buf, end='')
with open('123.txt', 'r', encoding='utf-8') as f:
for i in f:
print(i, end='')
json文件的处理
json 的介绍
json
-
基于⽂本,独⽴于语⾔的轻量级的数据交换格式
- 基于⽂本, 是⼀个⽂本⽂件, 不能包含图⽚,⾳视频等
- 独⽴于语⾔, 不是某个语⾔特有的, 每种编程语⾔都可以使⽤
的
- 轻量级, 相同的数据, 和其他格式相⽐,占⽤的⼤⼩⽐较⼩
- 数据交换格式, 后端程 序员 给前端的数据
(
json
,
html,xml
)
json 文件的语法
1.
json
⽂件的后缀是
.
json
2.
json
中主要数据类型为 对象({} 类似 Python 中 字典)
和 数组([], 类似 Python 中的列表), 对象和 数组可以互相嵌套
3. ⼀个json ⽂件是⼀个 对象或者数组(即 json ⽂件的最外层要么是⼀个 {}, 要么是⼀个 数组 [])
4. json 中的对象是由键值对组成的, 每个数据之间使⽤逗号隔开,但是最后⼀个数据后边不要写逗号
5.
json
中的字符串 必须使⽤ 双引号
6.
json
中的其他数据类型
>
数字类型
---->
int float
>
字符串
string
--->
str
>
布尔类型
true
,
false
----->
True
,
False
>
空类型
null
---->
None
{
"name": "小明",
"age": 18,
"isMen": true,
"like": [
"听歌",
"游戏",
"购物",
"吃饭",
"睡觉",
"打⾖⾖"
],
"address": {
"country": "中国",
"city": "上海"
}
}
读取 json 文件
导包 import json
读打开⽂件
读⽂件
json
.
load
(
⽂件对象
)
# 返回的是 字典(⽂件中是对象)或者列表(⽂件中是数组)
import json
with open ('info.json',encoding='utf-8')as f:
# buf = f.read()
# print(buf)
result = json.load(f)
print(type(result))
print(result.get('name'))
print(result.get('age'))
print(result.get('address').get('city'))
json 的写入
⽂件对象.write(字符串) 不能直接将 Python 的列表 和字典
作为参数传递
想要将 Python 中的数据类型存为 json ⽂件, 需要使⽤ json
提供的⽅法, 不再使⽤ write
1.
导包
import json
2.
写
(
w
)
⽅式打开⽂件
3.
写⼊
json.dump(Python 中的数据类型, ⽂件对象)
import json
my_list = [('admin', '123456', '登录成功'), ('root','123456', '登录失败'), ('admin', '123123', '登录失败')]
with open('info3.json','w',encoding='utf-8') as f:
json.dump(my_list,f,ensure_ascii=False,indent=4)#直接显示中⽂,不以 ASCII 的⽅式显示,显示缩进
异常
程序在运⾏时,如果 Python 解释器 遇到到⼀个错误,会停⽌程序的执⾏,并且提示⼀些错误信息,这就是异常
程序停⽌执⾏并且提示错误信息 这个动作, 抛出异常(raise 关键字)
捕获异常: 程序遇到异常, 默认动作是终⽌代码程序的执⾏, 遇⻅异常之后, 可以使⽤异常捕获,让程序代码继续运⾏,不会终 ⽌运⾏(重点)
基本语法
try
:
书写可能发⽣异常的代码
except
:
#
任何类型的异常都能捕获
发⽣了异常执⾏的代码
try
:
书写可能发⽣异常的代码
except
异常类型
:
#
只能捕获指定类型的异常
,
如果不是这个
异常
,
还是会报错
发⽣了异常执⾏的代码
异常捕获
try:
num = input('请输⼊数字:')
num = int(num)
print(num)
except:
print('请输⼊正确的数字')
捕获ValueError类型及其子类的异常
try:
num = input('请输⼊数字:')
num = int(num)
print(num)
except ValueError:
print('请输⼊正确的数字')
捕获多个指定类型的异常
好处: 可以针对不同的异常错误,进⾏单独的代码处理
try
:
书写可能发⽣异常的代码
except
异常类型
1
:
#
只能捕获指定类型的异常
,
如果不是这
个异常
,
还是会报错
发⽣了异常
1
执⾏的代码
except
异常类型
2
:
发⽣了异常
2
执⾏的代码
except
异常类型
...:
发⽣了异常
...
执⾏的代码
#多个异常的捕获
try:
#1. 获取⽤户从键盘输⼊的数据
num = input('请输⼊数字:')
# 2. 转换数据类型为整数
num = int(num)
# 3. 输出转换之后的数据内容
print(num)
a = 10 / num # 10 / 0
print(f'a: {a}')
except ValueError: # 只能捕获 ValueError 类型及其⼦类的异常
print('发⽣了异常, 请输⼊正确的数字...')
except ZeroDivisionError:
print('除数不能为 0')
异常捕获
try
:
可能发⽣异常的代码
except
异常类型
1
:
发⽣异常类型1
执⾏的代码
# Exception 是常⻅异常类的⽗类
,
这⾥书写
Exception,
可
以捕获常⻅的所有⼀会
, as
变量
,
这个变量是⼀个异常类的对
象
, print(
变量
)
可以打印异常信息
except
Exception
as
变量
:
发⽣其他类型的异常
,
执⾏的代码
else
:
没有发⽣异常会执⾏的代码
finally
:
不管有没有发⽣异常
,
都会执⾏的代码
try:
num = input('请输入数字:')
num = int(num)
print(num)
a = 10/num
print(f'a:{a}')
except Exception as e:
print(f'错误信息为:{e}')
else:
print('没有异常')
finally:
print('我一定会执行')
来源:黑马软件测试Python