python3之IO与序列化
文件IO
读写txt文件
with open("../files/test.txt", encoding="utf-8-sig") as f:
str = f.read()
lst = []
if str:
data = str.split("\n")
for row in data:
if len(row) > 0:
lst.append(row.split(","))
print(lst)
with open("../files/test.txt", "w", encoding="utf-8-sig") as f:
str = ""
for row in lst:
str += ",".join(row) + "\n"
if len(str) > 0:
f.write(str)
读写csv
import csv, random
data = []
with open("../files/pd.csv", encoding="utf-8-sig") as f:
reader = csv.reader(f, skipinitialspace=True)
headers = next(reader)
for row in reader:
data.append(row)
print(headers, data)
with open("../files/pd.csv", "w", newline="\n") as f:
writer = csv.writer(f)
data.append(
[
len(data),
random.randint(5, 10),
random.randint(2, 8),
random.randint(6, 15),
random.randint(1, 20),
]
)
writer.writerows([headers])
writer.writerows(data)
f.close()
内存IO
from io import StringIO, BytesIO
# 内存中读写文本
f = StringIO()
f.write("你")
f.write("好")
print(f.getvalue()) # 你好
f.writelines("\nhello\nhi")
print(f.getvalue())
f = StringIO("你好")
print("第一次读", f.read()) # 第一次读 你好
print("第二次读", f.read()) # 第二次读
print("getvalue", f.getvalue()) # getvalue 你好
while True:
text = f.readline()
if text == "":
break
print(text.strip())
print(f.readlines()) # []
# 内存中读写二进制
f = BytesIO()
f.write(b"a")
f.write("你好".encode("utf-8"))
print(f.getvalue()) # b'a\xe4\xbd\xa0\xe5\xa5\xbd'
print(f.getvalue().decode("utf-8")) # a你好
f = BytesIO(b"a\xe4\xbd\xa0\xe5\xa5\xbd")
text = f.read()
print(text) # b'a\xe4\xbd\xa0\xe5\xa5\xbd'
print(text.decode("utf-8")) # a你好
序列化
pickle序列化
import pickle
obj = [[1], 123, 0.1, "a", "中文", {"k2": (1, 2), "k1": [1, 2], "k3": {"a": 1}}]
print(obj) # [[1], 123, 0.1, 'a', '中文', {'k2': (1, 2), 'k1': [1, 2], 'k3': {'a': 1}}]
# pickle
str = pickle.dumps(obj)
print(str) # b'\x80\x04\x95<\x00\x00\x00\x00\x00\x00\x00]\x94(]\x94(K\x01K\x02eK'...
print(pickle.loads(str)) # [[1], 123, 0.1, 'a', '中文', {'k2': (1, 2), 'k1': [1, 2], 'k3': {'a': 1}}]
with open("../files/pickle.txt", "wb") as fp:
pickle.dump(str, fp)
with open("../files/pickle.txt", "rb") as fp:
data = pickle.load(fp)
print(data) # b'\x80\x04\x95<\x00\x00\x00\x00\x00\x00\x00]\x94(]\x94(K\x01K\x02eK'...
print(pickle.loads(data)) # [[1], 123, 0.1, 'a', '中文', {'k2': (1, 2), 'k1': [1, 2], 'k3': {'a': 1}}]
json序列化
import json
obj = [[1], 123, 0.1, "a", "中文", {"k2": (1, 2), "k1": [1, 2], "k3": {"a": 1}}]
print(obj) # [[1], 123, 0.1, 'a', '中文', {'k2': (1, 2), 'k1': [1, 2], 'k3': {'a': 1}}]
# json
# 编码 转化成str格式
str = json.dumps(obj)
print(str) # [[1], 123, 0.1, "a", "\u4e2d\u6587", {"k2": [1, 2], "k1": [1, 2], "k3": {"a": 1}}]
print(type(str)) # <class 'str'>
str = json.dumps(obj, sort_keys=True) # 对dict对象进行排序
print(str) # [[1], 123, 0.1, "a", "\u4e2d\u6587", {"k1": [1, 2], "k2": [1, 2], "k3": {"a": 1}}]
str = json.dumps(obj, indent=4) # 缩进,便于阅读
print(str)
# 解码 将str转化成dict/list格式
json1 = json.loads(str)
print(json1) # [[1], 123, 0.1, 'a', '中文', {'k2': [1, 2], 'k1': [1, 2], 'k3': {'a': 1}}]
with open("../files/test.json", encoding="utf-8-sig") as fp:
data = json.load(fp)
print(data) # {'name': '一', 'age': 5, 'area': 'a'}
with open("../files/test.json", "w+", encoding="utf-8-sig") as fp:
if len(data) > 0 and "data" in data and "name" in data["data"]:
data["data"]["name"] = "二"
json.dump(data, fp)
分类:
python3
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix