import json
# 普通文件的操作
# 根据文件中的二进制内容能否转换为文字,可以将文件分成两种:文本文件,二进制文件
# (能不能使用记事本打开,能打开就能转换为文本文件)文本txt,md,py,html,css,js,json二进制exe.jpg,png,mp3,mp4
# 文件操作步骤:1.打开文件.2.读写文件3.关闭文件
# 打开文件:open(file, mode='r', encoding=None),
# file是要打开的文件,类型字符串,路径可以是相对路径,也可以绝对路径
# mode:缺省参数,表示打开文件的方式,默认是只读.(w只写,a追加即append)
# encoding:编码方式,文字和二进制如何转换,gbk(将一个汉字转换为2个字节),utf-8(将一个汉字转换为3个字节,常用)
# 返回值:返回文件对象后,后续对文件的操作都需要这个对象
# 读写文件:文件对象.write()返回写入文件的字符数/文件对象.read(n),n表示读取多少个字符,一般不写,默认读取全部.返回读取的内容,字符串
# 关闭文件:文件对象.close()将文件占用的资源清理,同时保存的文件.文件关闭后文件对象销毁
# -------------------------------------------------------------------------------------
f = open("a.txt", 'w', encoding='utf-8')
f.write('hello World!好') # 文件不存在则创建文件,文件存在则覆盖原文件内容写入
f.close()
f1 = open('a.txt', 'a', encoding='utf-8')
f1.write("\ngood morning") # 默认不换行直接append,不存在也会直接创建
f1.close()
f2 = open('a.txt', 'r', encoding='utf-8') # 如果文件不存在则报错
print(f2.read())
f2.close()
# ---------------------------------------------------------------------------
# 使用with open打开文件:不用书写关闭代码,自动关闭
with open("a.txt", 'w', encoding='utf-8') as f4:
f4.write('666\n777') # 出缩进会自动关闭文件
# ----------------------------------------------------------------------------
# 按行读取内容
with open("a.txt", encoding='utf-8') as f5:
buf = f5.readline() # 文件指针指向第一行
print(buf)
print(f5.readline()) # 文件指针指向下一行
with open("a.txt", encoding='utf-8') as f6:
for i in f6: # 按行读取,直到文件末尾
print(i)
with open("a.txt", encoding='utf-8') as f7:
while True:
buf = f7.readline()
if buf:
print(buf)
else:
break
# json文件的操作
# Json也是文本文件,也可以使用read,write,只是不方便.读取的是字符串,处理字符串不方便
# 常用在测试时,将测试文件定义为json文件格式,使用代码进行读取
# json:独立于语言,不是某个语言特有,轻量级,和其他格式相比占用较少,后端给前端的数据
# json语法:后缀.json.主要数据类型是对象({}类似Python中的字典)和数组([]类似Python中的列表)
# # 一个json文件是一个对象或数组,即文件最外围要么是{},要么是[],有且只能有一个
# json中的对象类似字典,但是最后一个数据后不能有逗号,字典中有逗号是不报错的
# json中的字符串必须是双引号
# 数据类型:数字类型int,float,字符串str,布尔类型true,false,空null
# 读取json:1.导包import json2.读打开文件3.读文件json.load(文件对象),返回字典或列表
with open('info.json', 'r', encoding='utf-8') as jf:
buf = json.load(jf)
print(buf[0].get("name"))
print(buf[0].get("address").get("city"))
# json的写入:也可以使用write
with open('info.json', 'w', encoding='utf-8') as jf1:
info = {
"name": "小绿",
"age": 17,
"sex": "女",
"like": [
"听歌",
"学习",
"购物"
],
"address": {
"country": "中国",
"city": "北京"
}
}
# info为python中的数据,jf1为文件对象,ensure_ascii是否已asc码形式显示,indent缩进几个空格
json.dump(info, jf1, ensure_ascii=False, indent=4)
# 函数中有一个*参数,*后边的参数只能使用关键字方式传参