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

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

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

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

总结

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

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

本文由mdnice多平台发布

posted @ 2025-12-13 10:51  热爱技术的小牛  阅读(1)  评论(0)    收藏  举报
热爱技术的小牛