好的,各位观众老爷们,各位编程界的弄潮儿们,欢迎来到老司机我——人称“代码界的段子手”的课堂!今天,咱们要聊聊数据这玩意儿,以及如何像驯服野马一样,把它们加载进来,再像珍藏古董一样,小心翼翼地保存好。
主题是什么?当然是:数据加载与保存:CSV, Excel, JSON, SQL 等常见格式。
别害怕,我知道一听到这些名词,有些人就开始打哈欠了。但相信我,这绝对比你看《霸道总裁爱上我》更有意思,因为这是你驰骋数据海洋,成为数据大航海家必备的技能!😎
第一幕:数据,无处不在的“小妖精”
数据,这玩意儿,就像空气一样,无处不在。你每天刷的抖音,看的淘宝,用的微信,背后都离不开数据的支撑。它们记录着你的喜好,你的行为,甚至你的秘密。
数据就像一个个“小妖精”,它们形态各异,性格古怪。有的像规规矩矩的表格,有的像乱麻一样的文本,有的像深奥的密码,等着我们去破解。
所以,掌握数据的加载和保存,就相当于拥有了“御妖术”,能把这些“小妖精”玩弄于股掌之间。
第二幕:数据格式大观园,各领风骚数百年
既然“小妖精”们性格各异,那它们的“住所”自然也五花八门。我们常见的“住所”有以下几种:
- CSV (Comma Separated Values): 简单粗暴的“平民窟”,用逗号分隔数据,就像一群人挤在同一间屋子里,简单直接。
- Excel: 豪华版的“公寓”,每个数据都住在独立的单元格里,还能设置各种装修风格(格式)。
- JSON (JavaScript Object Notation): 精致的“别墅”,用键值对存储数据,结构清晰,层次分明,就像精心设计的花园。
- SQL (Structured Query Language): 坚固的“城堡”,数据存储在关系型数据库中,安全可靠,还能进行复杂的查询和分析。
接下来,我们就来逐一攻破这些“住所”,看看如何把“小妖精”们从里面请出来,再安全地送回去。
第三幕:CSV,简单粗暴的“平民窟”攻略
CSV文件,就像一份简单的电话簿,用逗号分隔姓名、电话号码、地址等信息。它的优点是简单、通用,几乎所有的编程语言都支持。
加载 CSV:
想象一下,你要从电话簿里找到某个人的电话号码。你需要做的就是打开电话簿,一行一行地查找,直到找到目标。
在 Python 中,我们可以使用 csv
模块来完成这个任务:
import csv
with open('data.csv', 'r', encoding='utf-8') as file: # 记得指定编码,防止乱码
reader = csv.reader(file)
header = next(reader) # 读取表头
data = list(reader)
print("表头:", header)
for row in data:
print(row)
这段代码就像一个勤劳的“电话簿管理员”,它打开 data.csv
文件,逐行读取数据,然后把数据打印出来。
open('data.csv', 'r', encoding='utf-8')
: 打开 CSV 文件,'r'
表示读取模式,encoding='utf-8'
指定编码方式,防止中文乱码。csv.reader(file)
: 创建一个 CSV 读取器,用于逐行读取数据。next(reader)
: 读取 CSV 文件的第一行,通常是表头。list(reader)
: 将剩余的行转换为列表,方便后续处理。
保存 CSV:
要把数据保存到 CSV 文件,就像把新的电话号码添加到电话簿里。
import csv
header = ['姓名', '年龄', '性别']
data = [['张三', '25', '男'], ['李四', '30', '女'], ['王五', '28', '男']]
with open('new_data.csv', 'w', newline='', encoding='utf-8') as file: # 'w'写入模式,newline=''解决空行问题
writer = csv.writer(file)
writer.writerow(header) # 写入表头
writer.writerows(data) # 写入数据
print("数据已保存到 new_data.csv")
这段代码就像一个细心的“电话簿编辑”,它把新的电话号码信息写入 new_data.csv
文件。
open('new_data.csv', 'w', newline='', encoding='utf-8')
: 打开 CSV 文件,'w'
表示写入模式,newline=''
解决写入 CSV 文件时出现空行的问题。csv.writer(file)
: 创建一个 CSV 写入器,用于写入数据。writer.writerow(header)
: 写入表头。writer.writerows(data)
: 写入多行数据。
CSV 总结:
CSV 就像一个简单朴实的“老朋友”,虽然没有华丽的外表,但胜在简单易用,是处理小型数据的首选。
第四幕:Excel,豪华“公寓”的优雅入住
Excel 文件就像一个豪华的“公寓”,每个数据都住在独立的单元格里,还能设置各种装修风格(格式)。它比 CSV 更强大,但同时也更复杂。
加载 Excel:
想象一下,你要入住豪华公寓,首先要找到你的房间号,然后才能进入。
在 Python 中,我们可以使用 pandas
库来完成这个任务:
import pandas as pd
df = pd.read_excel('data.xlsx', sheet_name='Sheet1') #指定sheet名称
print(df)
这段代码就像一个专业的“房产中介”,它打开 data.xlsx
文件,读取名为 Sheet1
的工作表,然后把数据打印出来。
pd.read_excel('data.xlsx', sheet_name='Sheet1')
: 读取 Excel 文件,sheet_name
指定工作表的名称。
保存 Excel:
要把数据保存到 Excel 文件,就像把你的家具搬进豪华公寓,然后按照你的喜好摆放。
import pandas as pd
data = {'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 28],
'性别': ['男', '女', '男']}
df = pd.DataFrame(data)
df.to_excel('new_data.xlsx', sheet_name='Sheet1', index=False) # index=False 不保存索引
print("数据已保存到 new_data.xlsx")
这段代码就像一个专业的“装修设计师”,它把数据转换为 DataFrame 对象,然后把 DataFrame 对象写入 new_data.xlsx
文件。
pd.DataFrame(data)
: 将字典转换为 DataFrame 对象。df.to_excel('new_data.xlsx', sheet_name='Sheet1', index=False)
: 将 DataFrame 对象写入 Excel 文件,index=False
表示不保存索引。
Excel 总结:
Excel 就像一个功能强大的“百宝箱”,能处理各种复杂的数据,但同时也需要一定的学习成本。
第五幕:JSON,精致“别墅”的精细打理
JSON 文件就像一个精致的“别墅”,用键值对存储数据,结构清晰,层次分明,就像精心设计的花园。它常用于 Web 应用中,用于传输数据。
加载 JSON:
想象一下,你要入住精致别墅,首先要打开大门,然后才能欣赏里面的美景。
在 Python 中,我们可以使用 json
模块来完成这个任务:
import json
with open('data.json', 'r', encoding='utf-8') as file: #记得指定编码!
data = json.load(file)
print(json.dumps(data, indent=4, ensure_ascii=False)) # 格式化输出,更美观
这段代码就像一个专业的“管家”,它打开 data.json
文件,读取 JSON 数据,然后把数据打印出来。
json.load(file)
: 从文件中读取 JSON 数据。json.dumps(data, indent=4, ensure_ascii=False)
: 将 Python 对象转换为 JSON 字符串,indent=4
表示缩进 4 个空格,ensure_ascii=False
允许输出中文。
保存 JSON:
要把数据保存到 JSON 文件,就像把你的艺术品摆放在精致别墅里,让它更加光彩夺目。
import json
data = {'姓名': '张三', '年龄': 25, '性别': '男', '爱好': ['篮球', '游泳']}
with open('new_data.json', 'w', encoding='utf-8') as file:
json.dump(data, file, indent=4, ensure_ascii=False) # 格式化输出,更美观
print("数据已保存到 new_data.json")
这段代码就像一个专业的“艺术品收藏家”,它把 Python 对象转换为 JSON 数据,然后把 JSON 数据写入 new_data.json
文件。
json.dump(data, file, indent=4, ensure_ascii=False)
: 将 Python 对象写入 JSON 文件。
JSON 总结:
JSON 就像一个优雅的“艺术家”,擅长处理结构化的数据,是 Web 应用开发中不可或缺的一部分。
第六幕:SQL,坚固“城堡”的安全守护
SQL 数据库就像一个坚固的“城堡”,数据存储在关系型数据库中,安全可靠,还能进行复杂的查询和分析。它适用于存储大量的数据,并进行复杂的查询和分析。
加载 SQL:
想象一下,你要进入坚固城堡,首先要通过守卫的盘查,然后才能进入。
在 Python 中,我们可以使用 sqlite3
模块(或其他数据库驱动)来完成这个任务:
import sqlite3
# 连接到数据库
conn = sqlite3.connect('data.db')
cursor = conn.cursor()
# 执行 SQL 查询
cursor.execute("SELECT * FROM users")
data = cursor.fetchall()
# 打印数据
for row in data:
print(row)
# 关闭连接
conn.close()
这段代码就像一个经验丰富的“探险家”,它连接到 data.db
数据库,执行 SQL 查询,然后把数据打印出来。
sqlite3.connect('data.db')
: 连接到 SQLite 数据库。cursor()
: 创建一个游标对象,用于执行 SQL 语句。cursor.execute("SELECT * FROM users")
: 执行 SQL 查询语句,SELECT * FROM users
表示查询users
表中的所有数据。cursor.fetchall()
: 获取查询结果的所有行。conn.close()
: 关闭数据库连接。
保存 SQL:
要把数据保存到 SQL 数据库,就像把新的居民登记到城堡的户籍系统里。
import sqlite3
# 连接到数据库
conn = sqlite3.connect('data.db')
cursor = conn.cursor()
# 创建表 (如果表不存在)
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER,
gender TEXT
)
''')
# 插入数据
data = [('张三', 25, '男'), ('李四', 30, '女'), ('王五', 28, '男')]
cursor.executemany("INSERT INTO users (name, age, gender) VALUES (?, ?, ?)", data)
# 提交更改
conn.commit()
# 关闭连接
conn.close()
print("数据已保存到 data.db")
这段代码就像一个负责任的“户籍管理员”,它连接到 data.db
数据库,创建 users
表(如果表不存在),然后把新的居民信息插入到 users
表中。
cursor.execute('''CREATE TABLE IF NOT EXISTS users ...''')
: 创建users
表,IF NOT EXISTS
表示如果表不存在则创建。cursor.executemany("INSERT INTO users ...", data)
: 插入多行数据,?
是占位符,用于防止 SQL 注入。conn.commit()
: 提交更改,将数据写入数据库。
SQL 总结:
SQL 数据库就像一个安全可靠的“堡垒”,能存储大量的数据,并进行复杂的查询和分析,是企业级应用的首选。
第七幕:选择困难症?别怕,老司机教你选!
面对这么多数据格式,你是不是有点懵了?别怕,老司机来帮你分析一下:
数据格式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
CSV | 简单易用,通用性强 | 没有格式,不适合存储复杂数据 | 小型数据,简单的文本数据 |
Excel | 功能强大,支持格式,可视化能力强 | 文件较大,不适合存储海量数据 | 中小型数据,需要进行格式化和可视化的数据 |
JSON | 结构清晰,层次分明,易于解析,适合 Web 应用 | 可读性较差,不适合存储二进制数据 | Web 应用,API 接口,配置文件 |
SQL | 安全可靠,支持复杂查询,适合海量数据 | 学习成本较高,需要数据库管理系统支持 | 大型应用,需要进行复杂查询和分析的数据 |
总而言之,选择哪种数据格式,取决于你的具体需求。如果你的数据量小,结构简单,CSV 是个不错的选择;如果你的数据需要格式化和可视化,Excel 更适合你;如果你的数据是结构化的,需要在 Web 应用中使用,JSON 是不二之选;如果你的数据量大,需要进行复杂的查询和分析,SQL 数据库是你的最佳选择。
第八幕:代码之外的碎碎念
数据加载和保存,看似简单,实则蕴含着许多技巧和陷阱。比如,编码问题,文件路径问题,数据类型转换问题等等。都需要我们在实践中不断摸索和总结。
记住,编程之路,没有捷径,只有不断学习和实践。希望今天的讲解能帮助你在数据海洋中扬帆起航,成为一名合格的数据大航海家! 🚀
最后,送给大家一句至理名言:
“代码虐我千百遍,我待代码如初恋!”
谢谢大家!咱们下期再见! 😉