1、文件的三种模式介绍:
#r 只读,不写,默认只读,打开的文件并不存在时候,会报错
#w 只写,会清空文件内容
#a 追加写,不会请求,打开的文件不存在的话,会帮忙新建一个文件。不能读
#升级版模式
#r+ 读写模式,打开不存在的文件时候,还是会报错。
#w+ 写读模式,可以读,还是会将文件内容清空,文件不存在时候,不会报错,会自动给创建一个新文件
#a+ 追加读模式,将文件指针挪了[默认文件指针在末尾],可以读,可以写,还可以自动创建不存在的文件。
1.1文件读写
f = open('users.txt','r+',encoding='utf-8') #有写入中文时候,定义好encoding
1.2读写文件的几个方法:
f = open('user.txt','r')
print(f.readlines()) #返回一个list,每一行是一个list元素。
print(type(f.readlines())) #list
print('一',f.read()) #获取到文件里的所有内容,读出来是字符串
print('二:',f.read()) #上条数据读完,游标在末尾,所以这个结果为空
print(f.readline()) #结果为str,为一行的内容
print(f.readline()) #结果为str,为一行的内容
1.3修改文件内容的几个方法:
# #实现目标:将文件里的所有'一点'改成'二点'
f = open('file.txt',encoding='utf-8')#与下面绝对路径是一致的。
res = f.read().replace('一点','二点') #读完,文件指针默认在最后了。
f.close()
f = open('file.txt','w',encoding='utf-8') #以只写的模式打开,清空文件内容。
f.write(res)
f.flush() #这个加不加都OK。不等缓冲区满不满与否,立马把缓冲区大小写入磁盘。
f.close()
# 第二种方式
f = open('file.txt','a+',encoding='utf-8')
f.seek(0)
res = f.read().replace('二点','一点')
f.seek(0)
f.truncate() #清空文件内容,这时候指针还要挪到文件头。
f.write(res)
f.close()
# #文件太大时候,一下子将所有的内容读取到内存里
#第三种:
import os
f = open('file.txt',encoding='utf-8')
f2 = open('file.txt.bak','w',encoding='utf-8')
for line in f: #line就是文件里的每一行内容
new_line = line.replace('一点','二点') #如果行里没有你这个字,就不替换,返回原内容。
f2.write(new_line)
f.close()
f2.close()
os.remove('file.txt')
os.renames('file.txt.bak','file.txt')
#第四种,等同于第三种的简写~
with open('file.txt',encoding='utf-8') as f,open('file.txt.bak','w') as f2:
for line in f: #with打开文件,可以打开多个文件。
new_line = line.replace('二点','一点')
f2.write(new_line)
os.remove('file.txt')
os.renames('file.txt.bak','file.txt')
1.4高效率处理文件:
#对于文件大小未知,读出文件所有内容
f = open('users.txt',encoding='utf-8')
#第一种方式:
while True:
line = f.readline()
if line != '':
print('line',line) #空行是空行,不是空的字符串
else:
print('文件内容读完了,结束啦')
break
#高效率方式
for line in f:
print(line)
2、处理json数据
接口的返回格式是json,json通用的数据类型,因为所有的语言都认识;json是字符串,json串就是字符串
2.1、json方法的使用,必须先导入json模块
举例:
#json.loads(s)方法
s = '''
{
"error_code": 0,
"stu_info": [
{
"id": 2059,
"name": "小白",
"sex": "男",
"age": 28,
"addr": "河南省XXXX",
"grade": "白羊座",
"phone": "18378309272",
"gold": 10896
},
{
"id": 2095,
"name": "小白",
"sex": "男",
"age": 24,
"addr": "河南省XXXX",
"grade": "摩羯座",
"phone": "13608417301",
"gold": 100
},
{
"id": 2142,
"name": "小白",
"sex": "男",
"age": 24,
"addr": "河南省XXXX",
"grade": "摩羯座",
"phone": "13608417304",
"gold": 100
}
]
}
'''
import json
res = json.loads(s) #将字符串转为字典,必须是标准的json格式。
print(res)
print(type(res)) #<class 'dict'>
#=======================json.dumps(dic)方法=======================
stus = {'abc':'123',
'中文':'456',
'efg':'789'}
res2 = json.dumps(stus,indent=4,ensure_ascii=False)
# #将字典转为字符串,indent=4加4个缩进。ensure_ascii这个是控制中文不转义的。
print('res2:',res2)
print(type(res2)) #<class 'str'>
2.2、json与文件操作相关时候,更便捷的方法
#===================json.load(f)================
f = open('stus.json', encoding='utf-8')
user_dic = json.load(f) #只需要传一个文件对象,就能读,并且得到字典类型的结果
print(user_dic) #{'abc': '123', '中文': '456', 'efg': '789'}
print(type(user_dic)) #<class 'dict'>
#===================json.dump(cont,f)================
stus = {'abc':'123',
'中文':'456',
'efg':'789'}
f = open('stus2.json','w',encoding='utf-8')
json.dump(stus,f,indent=4,ensure_ascii=False) #要写入的字典,对应的文件对象就可以了
2.1与2.2方法的总结:
#操作文件的时候:
#load()与loads()区别:在操作文件时候,用load(f)更方便,loads(s)需要手动传一个字符串
#dump()与dumps()的区别:dumps(dict)需要先转成字符串,然后再写入文件。用dump(dict,f)只需要要写入字典、文件对象,这一步就可以了。
#load()dump()与文件相关更好用!
#不操作文件时候,例如操作字符串,loads() dumps()比load()dump()好用!