聊聊Python数据序列化及其编码

本文探讨了Python中数据序列化为文本文件的过程,强调编码在数据流转中的作用。通过观察数据类型的变化,以及使用pandas进行读写操作,揭示了文件读写本质是文本操作,而非Python特定格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

编码就是信息在不同处理系统间流转时的某种基准,也就是写成文本文件或二进制文件的规则。我们讨论的重点是“写成文本”,不去管流媒体之类,我们处理的数据就是通过文本形式实现序列化的。

import pandas as pd
df = pd.DataFrame({'ID':[7801,7802,7809],'姓名':['钱谦益','乔安','王诗安'],'score':[54,67,78]})
from datetime import datetime
df['生日'] = df['姓名'].map({'钱谦益':datetime(1994,3,13),'乔安':datetime(1995,4,3),'王诗安':datetime(1994,12,3)})
df
ID姓名score生日
07801钱谦益541994-03-13
17802乔安671995-04-03
27809王诗安781994-12-03

我们观察一下这些值的类型,再写入文件,然后再读取

df.dtypes
ID                int64
姓名               object
score             int64
生日       datetime64[ns]
dtype: object
df.to_csv('coding_test.csv',encoding='gb2312',index=False)
!more coding_test.csv
ID,姓名,score,生日
7801,钱谦益,54,1994-03-13
7802,乔安,67,1995-04-03
7809,王诗安,78,1994-12-03
import csv
with open('coding_test.csv',mode='r',encoding='gb2312')  as f:
    reader = csv.reader(f)
    for row in reader: 
        print(row)
['ID', '姓名', 'score', '生日']
['7801', '钱谦益', '54', '1994-03-13']
['7802', '乔安', '67', '1995-04-03']
['7809', '王诗安', '78', '1994-12-03']

我们看见了什么?读进来的都是文本,不太清楚,再看

rows = []
with open('coding_test.csv',mode='r',encoding='gb2312')  as f:
    reader = csv.reader(f)
    for row in reader: 
        rows.append(row)
for r in rows:
    for item in r:
        print(item,'类型',type(item))
ID 类型 <class 'str'>
姓名 类型 <class 'str'>
score 类型 <class 'str'>
生日 类型 <class 'str'>
7801 类型 <class 'str'>
钱谦益 类型 <class 'str'>
54 类型 <class 'str'>
1994-03-13 类型 <class 'str'>
7802 类型 <class 'str'>
乔安 类型 <class 'str'>
67 类型 <class 'str'>
1995-04-03 类型 <class 'str'>
7809 类型 <class 'str'>
王诗安 类型 <class 'str'>
78 类型 <class 'str'>
1994-12-03 类型 <class 'str'>

现在我们来用pandas来读

df_in = pd.read_csv(r'coding_test.csv',encoding='gb2312')
df_in
ID姓名score生日
07801钱谦益541994-03-13
17802乔安671995-04-03
27809王诗安781994-12-03
df_in.dtypes
ID        int64
姓名       object
score     int64
生日       object
dtype: object

我们跟当时写入的dataframe比较一下

df.dtypes
ID                int64
姓名               object
score             int64
生日       datetime64[ns]
dtype: object

有意思吧。这样我们就知道读写文件是就是读写文本,不带一点Python的烟火气


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值