python序列化和模块的导入学习

mylist=list(itertols.product([1,2,3,4,5],repeat=4))
print(mylist)
#序列化----转向一个字符串的数据类型
#序列---字符串
"{'k':'v'}" \
#写文件
# 网络上传输
#从数据类型--》字符串的过程 序列化
#从字符串到数据类型  反序列化
#json模块
# shelve模块
# #pickle模块
#json通用的序列化格式
  #只有很少的一部分数据类型能够通过json转化成字符串
#pickle
  #所有的python中的数据类型都可以转换成字符串形式
  #pickle序列化的内容只有python能够理解
  #且部分反序列化依赖python代码
#shelve
  #序列化句柄 使用方便

dic={'k1‘:’v1'}
print(type(dic))
import json
str_d=json.dumps(dic)#序列化
print(type(str_d),str_d)
dic_d=json.loads(str_d)#反序列化
#数字 字符串 元组 列表 字典
#json dump load是对文件的操作
import json
dic={1:"a",2:"b"}
f=open('fff','w',encoding='utf-8')
json.dump(dic,f)#往文件里写
f.close()
f=open('fff')
res=json.load(f)#读文件
f.close()
print(type(res),res)

#json
# dumps{}---->'{}\n'
# #一行一行的读
# #‘{}\n'
#'{}'loads
l=[{'k':'111'},{'k2':'111'},{'k3':'111'}]
f=open('file','w')
import json
for dic in l:
    str_dic=json.dumps(dic)
    f.write(str_dic+'\n')
f.close()
f=open('file')
import json
for line in f:
    dic =json.loads(line.strip())
    l.append(dic)
f.close()
print(l)
import pickle
dic={'k1':'v1','k2':'v2','k3':'v3'}
str_dic=pickle.dumps(dic)
print(str_dic)#一串二进制内容

dic2 =pickle.loads(str_dic)
print(dic2)#字典



import time
struct_time = time.localtime(10000000)
print(struct_time)
f=open('pickle_file','wb')#注意是WB方式
pickle.dump(struct_time,f)
f.close()


f=open('pickle_file','rb')
struct_time2=pickle.load(f)
print(struct_time2.tm_year)


#shelve只提供一个open方法,是用key来访问的,使用起来和字典类似
import shelve
f=shelve.open('shelve_file')
f{'key'}={'int':10,'float':9.5,'string':'sample data'}#直接对文件句柄操作,就可以存入数据
f.close()

import shelve
f1=shelve.open('shelve_file')
existing=f1['key']#取出数据的时候只需要直接用key获取即可,但是如果key不存在会直接报错
f1.close()
print(existing)



import shelve
f1=shelve.open('shelve_file')
f1['key']['new_value']='this was not here before'
f1.close()

f2=shelve.open('shelve_file',writeback=True)#writeback的优点是减少了出错的概率,并且让对象的持久化对用户更加透明了,但这种方式并不是所有情况都需要,首先使用writeback以后,shell在open()放入时候增加额外内存的消耗,并且DB在close()的时候会将缓存中的每一个对象写入到DB,这也会带来额外的等待时间;
print(f2['key'])
f2.close()
print('demo.py')
#模块导入
def read():
print('in read1')
#文件##
import demo
demo.read()
#找到模块 创建这个模块的命名空间  把文件内的名字都放到命名空间
import time as t
print(t.time())
#数据库
import oracle
import mysql
#连接数据库   登录认证  闭数据库
if 数据库=‘oracle':
    import oracle as db
if 数据库=‘mysql':
    import mysql as db
#内置模块  扩展的django  自定义的模块
from time import  sleep
sleep()
# 单独导入方法和变量
import sys
print(sys.path)

#demo.py
__all__=['money','read','read2']
print('in demo.py')
money=100
def read():
    print('in read1',money)

def read2():
    print('in read2',money)
from demo import *
# import 模块名
#    #模块名.变量名 和本文件中的变量名完全不冲突
#    #模块不会重复导入:sys.moudles sys.path这里导入
# import 模块名 as 重命名的模块名:提高代码的兼容性
#__name__
#在模块中 有一个变量__name__,
# 当我们直接执行这个模块的时候,__name__=='__main__'
# 当我们执行其他模块,在其他模块中引用模块的时候,这个模块中的__name__=='模块的名字'

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雪snowflake

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值