您的位置:首页 > 编程语言 > Python开发

python-模块系列

2015-12-08 11:00 375 查看
模块,用一砣代码实现了某个功能的代码集合。

类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块。

如:os 是系统相关的模块;file是文件操作相关的模块

模块分为三种:

自定义模块

第三方模块

内置模块

自定义模块

自定义模块很好理解了,就是自己写的模块,它可以是一个.py的文件,也可以是一个文件夹(如果是文件夹必须有__int__的目录才是模块,否则就是一个普通目录)

1.定义模块

#!/usr/bin/env python
#-*- coding:utf-8 -*-
__author__ = 'wyf'

import hashlib

def md5(passwd):
hash = hashlib.md5('admin')
hash.update(passwd)
return hash.hexdigest()

def registered (user,passwd):#注册用户函数
with open('db.conf','a') as f:
temp = user +'|'+ md5(passwd)
f.write(temp+'\n')

def login(user,passwd):
with open('db.conf','r') as f1:
for i in f1:
u,p = i.strip().split('|')
if u == user and p == md5(passwd):
return  True
def main():
print u'1、登录;2、注册;3.退出'
chooseNum = raw_input('请输入选择的操作》》》:')
if chooseNum == '1':
user = raw_input('请输入用户名》》》:')
passwd = raw_input('请输入密码》》》:')
if login(user,passwd):
print '登录成功'
else:
print '登录失败'

elif chooseNum =='2':
user = raw_input('请输入用户名》》》:')
passwd = raw_input('请输入密码》》》:')
registered(user,passwd)

if __name__ == '__main__':
main()


登录小练习

4.json和pickle

用于序列化的两个模块

pickle,用户python特有的类型和python的数据类型间进行转换。

json,用于字符串和python的数据类型间进行转换。

pickle模块:

pickle模块使用的数据格式是python专用的,并且不同版本不向后兼容,同时也不能被其他语言识别。要和其他语言交互,可以使用内置的json包,使用pickle模块你可以把python对象直接保存到文件,而不需要把他们转化为字符串,也不用底层的文件访问操作把它们写入到一个二进制文件里。 pickle模块会创建一个python语言专用的二进制格式,你基本上不用考虑任何文件细节,它会帮你干净利落地完成读写独享操作,唯一需要的只是一个合法的文件句柄。

pickle模块中的两个主要函数是dump()和load()。dump()函数接受一个文件句柄和一个数据对象作为参数,把数据对象以特定的格式保存到给定的文件中。当我们使用load()函数从文件中取出已保存的对象时,pickle知道如何恢复这些对象到它们本来的格式。
dumps()函数执行和dump() 函数相同的序列化。取代接受流对象并将序列化后的数据保存到磁盘文件,这个函数简单的返回序列化的数据。
loads()函数执行和load() 函数一样的反序列化。取代接受一个流对象并去文件读取序列化后的数据,它接受包含序列化后的数据的str对象, 直接返回的对象。

dumps和dump区别展示:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
import pickle

s = '{"desc":"ininia","status":200,"aaa":[11,22,33,44,55,66]}'

f = open('abc.txt','r+')
a = pickle.dump(s,f) #dump除了传存储对象还有 打开的文件句柄
f.close()

f1 = open('abc1.txt','r+')
a1 = pickle.dumps(s) # dumps 直接传存储对象
f.write(a1)
f.close()


loads和load是dumps和dump的反操作因此都一样。

json模块:

似乎pickle已经和吊了,能满足几乎所有的序列化和反序列话,但是不要忘记前面提到的pickle只是python特有的操作,只能python才能操作,如果这样的话是不是太局限了?这时候json就有存在的意义了,它可以跨语言进行数据交换,基本上大多数语言都支持json,如果是两个跨语言的数据交换,json是最好的选择,你只要说哥们json吧。但是有一点必须注意,json是很多语言都支持,这也导致了一些局限性,有些python支持的数据类型,json不支持,因此json序列化一般为字典和列表。

json的用法和pickle一样,提供了四个功能:dumps、dump、loads、load。

实例:

s = '{"desc":"ininia","status":200,"aaa":[11,22,33,44,55,66]}'
s1 = {"desc":"ininia","status":200,"aaa":[11,22,33,44,55,66]}
import json
result = json.loads(s)#将字符串转换成对象
print result,type(result)
#{u'status': 200, u'aaa': [11, 22, 33, 44, 55, 66], u'desc': u'ininia'} <type 'dict'>

result1 = json.dumps(s1)#将对象转换成字符串
print result1,type(result1)
#{"status": 200, "aaa": [11, 22, 33, 44, 55, 66], "desc": "ininia"} <type 'str'>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: