04-Python的输入与输出到JSON序列化,一篇搞定数据流转
Python的输入与输出到JSON序列化,一篇搞定数据流转
互联网信息流转的核心是“输入-处理-输出”,这与图灵机原理一致,Python程序亦遵循此逻辑。数据通过
input()、文件读取等进入代码,经运算处理后,由print()、文件写入等输出结果。无需关注底层实现,聚焦输入输出的逻辑关联即可。掌握标准IO、文件操作、JSON/CSV等数据格式读写,是掌控数据流的关键。通过实操练习建立数据流掌控力,是构建程序思维、编写实用Python程序的基础。
一、入门:键盘与屏幕的“对话”——基础输入输出
Python与用户最直接的交互,就是通过键盘输入、屏幕输出实现的。这部分看似简单,却藏着不少新手容易踩的坑,我们结合实例慢慢说。
1. 输入:用input()获取用户信息
input()函数是Python接收键盘输入的“大门”,它会暂停程序运行,等待用户输入内容并按下回车。需要注意的是,无论用户输入的是数字、文字还是符号,input()的返回值永远是字符串类型(str) 。
比如我们做一个简单的用户欢迎程序:
# 接收用户输入的姓名和性别
name = input('请输入你的姓名:')
gender = input('你是男生吗?(输入y表示是,n表示否):')
# 根据性别确定前缀,拼接欢迎语
welcome_str = '欢迎来到矩阵世界,{prefix} {name}!'
welcome_dic = {
'prefix': '先生' if gender == 'y' else '女士',
'name': name
}
# 模拟“授权”过程,输出欢迎语
print('正在验证信息...')
print(welcome_str.format(**welcome_dic))
如果我们输入“Jack”和“y”,程序会输出:
正在验证信息...
欢迎来到矩阵世界,先生 Jack!
这个例子里,input()的参数是提示用户的文字,让交互更清晰;后续通过字典和字符串格式化,让输出内容更灵活。
2. 避坑:字符串与数字的“转换陷阱”
新手最容易犯的错,就是忽略input()的返回类型。比如想计算两个数字的和,直接用input()获取后相加,结果会和预期完全不一样:
# 错误示例:直接相加input()获取的值
a = input('请输入第一个数字:')
b = input('请输入第二个数字:')
# 此时“+”是字符串拼接,不是数字加法
print('直接相加结果:a + b = {}'.format(a + b))
# 查看变量类型,确认都是字符串
print('a的类型:{}, b的类型:{}'.format(type(a), type(b)))
# 正确做法:先把字符串转为数字再相加
print('正确相加结果:a + b = {}'.format(int(a) + int(b)))
如果我们输入“1”和“2”,程序输出会是:
直接相加结果:a + b = 12
a的类型:<class 'str'>, b的类型:<class 'str'>
正确相加结果:a + b = 3
这里的关键是类型转换:用int()把字符串转为整数,用float()转为浮点数。不过在实际项目中,一定要加try-except异常处理(后续文章会详细讲),避免用户输入非数字内容导致程序崩溃。
3. 输出:用print()展示多样结果
print()函数比input()更灵活,它能接收字符串、数字、列表、字典甚至自定义类,帮我们把处理后的数据展示出来。比如:
# 输出不同类型的数据
print('字符串直接输出')
print(123) # 输出数字
print([1, 2, 3]) # 输出列表
print({'name': 'Jack', 'gender': 'male'}) # 输出字典
运行后会依次展示不同类型的数据,无需额外转换,print()会自动处理格式。
二、进阶:与文件“打交道”——文件输入输出
基础的键盘输入只能处理临时数据,想要长期存储或读取大量数据,就需要和文件交互。Python通过open()函数打开文件,配合read()、write()等方法实现数据读写,而with语句则能帮我们避免“忘记关闭文件”的隐患。
1. 核心:open()函数的“打开方式”
open()函数有两个关键参数:文件路径(path)和打开模式(mode)。常见的打开模式有:
- 'r':只读模式(默认),只能读取文件内容,不能修改;
- 'w':写入模式,会清空文件原有内容再写入,若文件不存在则创建;
- 'a':追加模式,在文件末尾添加内容,不会清空原有数据;
- 'rb'/'wb':二进制模式,用于读取图片、视频等非文本文件。
2. 读写文件:从“读取内容”到“写入数据”
我们用一个实例演示文本文件的读写:
# 1. 写入文件:用with语句自动管理文件关闭
with open('test.txt', 'w', encoding='utf-8') as f:
# 写入多行内容
f.write('第一行:Python文件操作\n')
f.write('第二行:用with语句更安全\n')
# 2. 读取文件:读取刚才写入的内容
with open('test.txt', 'r', encoding='utf-8') as f:
# 方法1:读取全部内容
all_content = f.read()
print('全部内容:\n', all_content)
# 方法2:重置文件指针到开头,逐行读取
f.seek(0) # 把指针移到文件开头
line1 = f.readline()
line2 = f.readline()
print('\n逐行读取:')
print(line1.strip()) # strip()去除换行符
print(line2.strip())
运行后,会在当前目录生成test.txt文件,同时屏幕输出:
全部内容:
第一行:Python文件操作
第二行:用with语句更安全
逐行读取:
第一行:Python文件操作
第二行:用with语句更安全
这里要注意两点:一是用encoding='utf-8'避免中文乱码;二是with语句会在代码块结束后自动关闭文件,比手动调用close()更安全,能避免因程序崩溃导致文件未关闭的问题。
三、实战:数据“中转站”——JSON序列化与反序列化
在实际项目中,我们经常需要把Python数据(比如字典、列表)传给其他程序,或存储到文件中。而JSON(JavaScript Object Notation)是最常用的“数据格式桥梁”,它能把Python数据转为字符串(序列化),也能把JSON字符串转回Python数据(反序列化)。
1. 核心函数:json.dumps()与json.loads()
Python的json模块提供了两个关键函数:
- json.dumps(data):把Python数据(字典、列表等)转为JSON字符串;
- json.loads(json_str):把JSON字符串转回Python数据。
我们用一个用户信息的例子演示:
import json # 导入json模块
# 1. Python字典(用户信息)
user_info = {
'name': 'Jack',
'age': 25,
'is_student': False,
'hobbies': ['coding', 'reading']
}
# 2. 序列化:Python字典 → JSON字符串
json_str = json.dumps(user_info, indent=2, ensure_ascii=False)
print('JSON字符串:\n', json_str)
print('JSON字符串类型:', type(json_str))
# 3. 反序列化:JSON字符串 → Python字典
new_user_info = json.loads(json_str)
print('\n转回Python字典:\n', new_user_info)
print('name字段值:', new_user_info['name'])
print('hobbies类型:', type(new_user_info['hobbies'])) # 列表类型
运行后输出:
JSON字符串:
{
"name": "Jack",
"age": 25,
"is_student": false,
"hobbies": [
"coding",
"reading"
]
}
JSON字符串类型: <class 'str'>
转回Python字典:
{'name': 'Jack', 'age': 25, 'is_student': False, 'hobbies': ['coding', 'reading']}
name字段值: Jack
hobbies类型: <class 'list'>
其中indent=2让JSON字符串格式更美观,ensure_ascii=False确保中文正常显示(如果有中文的话)。
2. 进阶:JSON与文件的“联动”
如果要把JSON数据存储到文件,或从文件读取JSON数据,可以用json.dump()和json.load()(少了一个s),直接操作文件:
import json
user_info = {
'name': 'Jack',
'age': 25,
'hobbies': ['coding', 'reading']
}
# 1. 把Python数据写入JSON文件
with open('user_info.json', 'w', encoding='utf-8') as f:
json.dump(user_info, f, indent=2, ensure_ascii=False)
# 2. 从JSON文件读取数据,转回Python字典
with open('user_info.json', 'r', encoding='utf-8') as f:
loaded_info = json.load(f)
print('从文件读取的用户姓名:', loaded_info['name'])
print('从文件读取的用户爱好:', loaded_info['hobbies'])
运行后会生成user_info.json文件,同时能成功读取并打印数据,这在项目中存储配置、传输数据时非常实用。
四、思考题:巩固实战能力
学完理论,不如动手试试这两道题,检验自己的掌握程度:
- Word Count实战:读取一篇英文文本文件(比如test.txt),统计文件中每个单词出现的次数,最后把结果用JSON格式保存到count_result.json中(提示:可以用split()分割单词,用字典统计次数)。
- 跨设备数据传输:如果想把家里电脑上的一个JSON文件(比如用户信息)传到公司电脑,你会怎么实现?需要考虑哪些问题(比如文件损坏、数据安全)?
总结
Python的数据的“输入-处理-输出”流转:从基础的键盘输入(input())、屏幕输出(print()),到文件的读写(open()、with语句),再到JSON的序列化与反序列化(json模块),每一步都是为了让数据更高效、更安全地流转。
记住几个关键要点:input()返回值永远是字符串,需按需转换类型;操作文件用with语句更安全;JSON是跨程序、跨设备的数据“通用语言”。下次遇到数据交互的需求,不妨从这几个角度出发,相信你能轻松应对!
本文由mdnice多平台发布
本文来自博客园,作者:热爱技术的小牛,转载请注明原文链接:https://www.cnblogs.com/my-blogs-for-everone/p/19345028

浙公网安备 33010602011771号