python基础学习_文件与异常_模块json

1.4 存储数据 模块json

程序用户提供的信息存储在列表和字典等数据结构中,用户关闭是,我们需要保存信息

模块json存储数据

模块json的作用:将简单python数据结构存储到文件中,在程序再次运行时加载该文件的

数据;还可以与程序之间分享数据

特点:json数据格式在其他编程语言也有,所以易于信息分享

json(JavaScript Object Notation)格式源头: javaScript开发的

1.4.1 使用 json.dump()和 json.load()

json.dump(): 存储数据

json.load(): 加载数据

1、存储数据 json.dump()

import json

numbers = [2,3,5,7,9,11,13]

filename = 'number.json'

with open(filename,'w') as f_obj:
    json.dump(numbers, f_obj)

结果:

[2, 3, 5, 7, 9, 11, 13] # 该结果从文件中可以看到,存储的确实是列表

2、加载数据 json.load()

import json

filename = 'number.json'

with open(filename) as f_obj:
    numbers = json.load(f_obj)

print(numbers)

结果:

[2, 3, 5, 7, 9, 11, 13]

总结: 利用模块json的json.dump()方法和json.load()方法可以简单在程序之间共享数据

1.4.2 保存和读取用户生成的数据

import json

username = input("What is your name? ")

filename = 'username.json'
with open(filename,'w') as f_obj:
    json.dump(username, f_obj)
    print("We'll remember you when you come back, " + username + "!")

结果:


What is your name? liming
We'll remember you when you come back, liming!片

向其名字被存储的用户发出问候

import json

filename = "username.json"

with open(filename) as f_obj:
    username = json.load(f_obj)
    print("Welcome back, " + username + "!")

结果:

Welcome back, liming!

合并写读程序

import json

如果以前存储了用户名,就加载它

否则,就提示用户输入用户名并存储它

filename = "username.json"
try:
    with open(filename) as f_obj:
        username = json.load(f_obj)
except FileNotFoundError:
    username = input("What is your name? ")
    with open(filename,'w') as f_obj:
        json.dump(username, f_obj)
        print("We'll remember you when you come back, " + username + "!")
else:
    print("Welcome back, " + username + "!")

结果:

Welcome back, liming!

1.4.3 重构

重构定义: 代码能够正确地运行,但可做进一步的改进——————将代码划分为一系列完成

具体工作的函数,这个细分过程就叫做重构,实质就将功能细化,用多个函数实现

好处:让代码更清晰、更容易扩展

import json

def greet_user():
    """问候语,并指出器名字"""
    filename = "username.json"
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        username = input("What is your name? ")
        with open(filename,'w') as f_obj:
            json.dump(username, f_obj)
            print("We'll remember you when you come back, " + username + "!")  
    else:
        print("Welcome back, " + username + "!")

greet_user()

结果:

greet_user()
Welcome back, liming!

重构greet_user(),即将函数的功能细化为多个函数完成

import json

def get_sorted_username():
    """如果存储了用户名,就获取它"""
    filename = 'username.json'
    
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return username

def greet_user():
    """问候用户,并指出其名字"""
    username = get_sorted_username()
    if username:
        print("Welcome back, " + username + "!")
    else:
        username = input("What is your name? ")
        filename = 'username.json'
        with open(file_name,'w') as f_obj:
            json.dump(filename, f_obj)
            print("We'll remember you when you come back, " + username + "!")

greet_user()

结果:

greet_user()
Welcome back, liming!

进一步重构

def get_sorted_username():
    """如果存储了用户名,就获取它"""
    filename = 'username.json'
    
    try:
        with open(filename) as f_obj:
            username = json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return username

def get_new_username():
    """提示用户输入用户名"""
    username = input("What is your name? ")
    filename = 'username.json'
    with open(filename,'w') as f_obj:
        json.dump(username, f_obj)
    return username

def greet_user():
    """问候用户,并指出其名字"""
    username = get_sorted_username()
    if username:
        print("Welcome back, " + username + "!")
    else:
        username = get_new_username()
        print("We'll remember you when you come back, " + username + "!")

greet_user()

结果:

Welcome back, liming!

重构(拆分功能块)的好处,易于写出清晰和便于维护、扩展的代码

总结:

         模块json:               1 方法json.dump(w_name,f_obj)  作用将数据写入文件中,w_name: 数据存储的变量,f_obj:指向文件对象的变量名
                                       2 方法json.load(f_obj)    作用将数据从文件中导出到变量中
                                       f_obj: 指向文件对象的变量名
         重构:作用拆分函数功能块,将其用多个函数来完成,方便查看、维护、扩展
         try-except-else模块在重构中作用很大,需要多次练习才能知道里面的妙处。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值