文件操作以及处理json数据

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()好用!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值