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

刺骨的言语ヽ痛彻心扉 2022-02-16 17:45 303阅读 0赞
  1. mylist=list(itertols.product([1,2,3,4,5],repeat=4))
  2. print(mylist)
  3. #序列化----转向一个字符串的数据类型
  4. #序列---字符串
  5. "{'k':'v'}" \
  6. #写文件
  7. # 网络上传输
  8. #从数据类型--》字符串的过程 序列化
  9. #从字符串到数据类型 反序列化
  10. #json模块
  11. # shelve模块
  12. # #pickle模块
  13. #json通用的序列化格式
  14. #只有很少的一部分数据类型能够通过json转化成字符串
  15. #pickle
  16. #所有的python中的数据类型都可以转换成字符串形式
  17. #pickle序列化的内容只有python能够理解
  18. #且部分反序列化依赖python代码
  19. #shelve
  20. #序列化句柄 使用方便
  21. dic={'k1‘:’v1'}
  22. print(type(dic))
  23. import json
  24. str_d=json.dumps(dic)#序列化
  25. print(type(str_d),str_d)
  26. dic_d=json.loads(str_d)#反序列化
  27. #数字 字符串 元组 列表 字典
  28. #json dump load是对文件的操作
  29. import json
  30. dic={1:"a",2:"b"}
  31. f=open('fff','w',encoding='utf-8')
  32. json.dump(dic,f)#往文件里写
  33. f.close()
  34. f=open('fff')
  35. res=json.load(f)#读文件
  36. f.close()
  37. print(type(res),res)
  38. #json
  39. # dumps{}---->'{}\n'
  40. # #一行一行的读
  41. # #‘{}\n'
  42. #'{}'loads
  43. l=[{'k':'111'},{'k2':'111'},{'k3':'111'}]
  44. f=open('file','w')
  45. import json
  46. for dic in l:
  47. str_dic=json.dumps(dic)
  48. f.write(str_dic+'\n')
  49. f.close()
  50. f=open('file')
  51. import json
  52. for line in f:
  53. dic =json.loads(line.strip())
  54. l.append(dic)
  55. f.close()
  56. print(l)
  57. import pickle
  58. dic={'k1':'v1','k2':'v2','k3':'v3'}
  59. str_dic=pickle.dumps(dic)
  60. print(str_dic)#一串二进制内容
  61. dic2 =pickle.loads(str_dic)
  62. print(dic2)#字典
  63. import time
  64. struct_time = time.localtime(10000000)
  65. print(struct_time)
  66. f=open('pickle_file','wb')#注意是WB方式
  67. pickle.dump(struct_time,f)
  68. f.close()
  69. f=open('pickle_file','rb')
  70. struct_time2=pickle.load(f)
  71. print(struct_time2.tm_year)
  72. #shelve只提供一个open方法,是用key来访问的,使用起来和字典类似
  73. import shelve
  74. f=shelve.open('shelve_file')
  75. f{'key'}={'int':10,'float':9.5,'string':'sample data'}#直接对文件句柄操作,就可以存入数据
  76. f.close()
  77. import shelve
  78. f1=shelve.open('shelve_file')
  79. existing=f1['key']#取出数据的时候只需要直接用key获取即可,但是如果key不存在会直接报错
  80. f1.close()
  81. print(existing)
  82. import shelve
  83. f1=shelve.open('shelve_file')
  84. f1['key']['new_value']='this was not here before'
  85. f1.close()
  86. f2=shelve.open('shelve_file',writeback=True)#writeback的优点是减少了出错的概率,并且让对象的持久化对用户更加透明了,但这种方式并不是所有情况都需要,首先使用writeback以后,shellopen()放入时候增加额外内存的消耗,并且DBclose()的时候会将缓存中的每一个对象写入到DB,这也会带来额外的等待时间;
  87. print(f2['key'])
  88. f2.close()
  89. print('demo.py')
  90. #模块导入
  91. def read():
  92. print('in read1')
  93. #文件##
  94. import demo
  95. demo.read()
  96. #找到模块 创建这个模块的命名空间 把文件内的名字都放到命名空间
  97. import time as t
  98. print(t.time())
  99. #数据库
  100. import oracle
  101. import mysql
  102. #连接数据库 登录认证 闭数据库
  103. if 数据库=‘oracle':
  104. import oracle as db
  105. if 数据库=‘mysql':
  106. import mysql as db
  107. #内置模块 扩展的django 自定义的模块
  108. from time import sleep
  109. sleep()
  110. # 单独导入方法和变量
  111. import sys
  112. print(sys.path)
  113. #demo.py
  114. __all__=['money','read','read2']
  115. print('in demo.py')
  116. money=100
  117. def read():
  118. print('in read1',money)
  119. def read2():
  120. print('in read2',money)
  121. from demo import *
  122. # import 模块名
  123. # #模块名.变量名 和本文件中的变量名完全不冲突
  124. # #模块不会重复导入:sys.moudles sys.path这里导入
  125. # import 模块名 as 重命名的模块名:提高代码的兼容性
  126. #__name__
  127. #在模块中 有一个变量__name__,
  128. # 当我们直接执行这个模块的时候,__name__=='__main__'
  129. # 当我们执行其他模块,在其他模块中引用模块的时候,这个模块中的__name__=='模块的名字'

发表评论

表情:
评论列表 (有 0 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读