当前位置: 首页 > news >正文

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 jsonuser_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文件,同时能成功读取并打印数据,这在项目中存储配置、传输数据时非常实用。

四、思考题:巩固实战能力

学完理论,不如动手试试这两道题,检验自己的掌握程度:

  1. Word Count实战:读取一篇英文文本文件(比如test.txt),统计文件中每个单词出现的次数,最后把结果用JSON格式保存到count_result.json中(提示:可以用split()分割单词,用字典统计次数)。
  2. 跨设备数据传输:如果想把家里电脑上的一个JSON文件(比如用户信息)传到公司电脑,你会怎么实现?需要考虑哪些问题(比如文件损坏、数据安全)?

总结

Python的数据的“输入-处理-输出”流转:从基础的键盘输入(input())、屏幕输出(print()),到文件的读写(open()、with语句),再到JSON的序列化与反序列化(json模块),每一步都是为了让数据更高效、更安全地流转。

记住几个关键要点:input()返回值永远是字符串,需按需转换类型;操作文件用with语句更安全;JSON是跨程序、跨设备的数据“通用语言”。下次遇到数据交互的需求,不妨从这几个角度出发,相信你能轻松应对!

本文由mdnice多平台发布

http://www.jsqmd.com/news/81880/

相关文章:

  • 49、Linux系统内核管理与故障排查全解析
  • 50、Red Hat Enterprise Linux:救援系统启动与高可用性集群搭建指南
  • 2025年热门的专业水溶肥/微量元素水溶肥TOP实力厂家推荐榜 - 行业平台推荐
  • 2025年比较好的离婚律师/北京丰台离婚律师行业推荐榜 - 品牌宣传支持者
  • 2025年可靠的大连设备搬运公司行业表现榜 - 品牌宣传支持者
  • C语言编程练习(一)
  • ProComponents终极指南:快速构建企业级应用的完整教程
  • ML4W Hyprland配置:打造现代化Linux桌面环境的5个关键步骤
  • 51、高可用性集群配置与安装指南
  • 52、高可用性集群配置与服务创建指南
  • Windows 服务器任务管理器用户客户端名怎么修改?Windows 10修改电脑设备名称
  • 卡内基梅隆大学——计算摄影
  • 2025年质量好的稀土氯化物/稀土值得信赖厂家榜 - 品牌宣传支持者
  • 终极指南:快速配置Zotero-arXiv-Daily学术追踪神器
  • 2025年评价高的全屋定制生态板/本地全屋定制性价比推荐榜 - 行业平台推荐
  • AnimeGAN终极指南:用AI打造专属动漫头像的完整教程
  • 17、树莓派户外项目实用指南
  • 2025年比较好的继承律师/北京继承律师事务所口碑排行榜 - 行业平台推荐
  • 标准解读|即将实施的三份汽车安全强制性标准 - 实践
  • 3个理由告诉你为什么Subnautica Nitrox多人模组值得一试
  • 53、高可用性集群与安装服务器搭建指南
  • 3种方法解决OBS Studio浏览器源调试难题:从卡顿到丝滑的完整指南
  • 2025年质量好的低甲醛实木板/装修实木板TOP实力厂家推荐榜 - 品牌宣传支持者
  • SiYuan笔记Word互操作终极指南:彻底打通知识管理与办公文档
  • 正点原子XCOM串口调试工具:嵌入式开发的必备神器
  • 54、服务器安装配置与实践指南
  • 2025年比较好的古建金属屋面/立边咬合金属屋面厂家最新权威推荐排行榜 - 行业平台推荐
  • SideFX Labs终极指南:免费解锁专业级3D创作工具
  • PaddleOCR移动端模型微调效果丢失的深度解析与实战解决方案
  • AG-UI TypeScript SDK终极指南:从零构建智能对话应用