json和pickle

用于序列化的两个模块
json,用于字符串 和 python数据类型间进行转换
pickle,用于python特有的类型 和 python的数据类型间进行转换

json模块提供了四个功能:dumps、dump、loads、load
pickle模块提供了四个功能:dumps、dump、loads、load

json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中  loads把字符串转换成数据类型  load把文件打开从字符串转换成数据类型

pickle同理

现在有个场景在不同设备之间进行数据交换很low的方式就是传文件,dumps可以直接把服务器A中内存的东西发给其他服务器,比如B服务器、
在很多场景下如果用pickle的话那A的和B的程序都的是python程序这个是不现实的,很多时候都是不同的程序之间的内存交换怎么办?就用到了json(和html类似的语言)
并且josn能dump的结果更可读,那么有人就问了,那还用pickle做什么不直接用josn,是这样的josn只能把常用的数据类型序列化(列表、字典、列表、字符串、数字、),比如日期格式、类对象!josn就不行了。
为什么他不能序列化上面的东西呢?因为josn是跨语言的!
具体实例如下
 import json
'''
json dumps把数据类型转换成字符串 dump把数据类型转换成字符串并存储在文件中
loads把字符串转换成数据类型 load把文件打开从字符串转换成数据类型
'''
name = {'name':'dicky','age':}
print type(json.dumps(name)) #数据类型转换成字符串
print json.dumps(name)
print json.loads(json.dumps(name))
print type(json.loads(json.dumps(name))) #字符串转换成字典 结果
<type 'str'>
{"age": , "name": "dicky"}
{u'age': , u'name': u'dicky'}
<type 'dict'>
 '''
dump把数据类型转换成字符串并存储在文件中
load把文件打开从字符串转换成数据类型
'''
new_list = {'age':,'work':'IT'}
with open ('test1','w') as openfile:
json.dump(new_list,openfile)
print "以上就是dump......." with open('test1','rb') as readfile:
result=json.load(readfile)
print "load完成",type(result)
print result 结果
以上就是dump.......
load完成 <type 'dict'>
{u'age': , u'work': u'IT'}

ConfigParser

用于对特定的配置进行操作,当前模块的名称在 python 3.x 版本中变更为 configparser。

 import ConfigParser

 '''
test1
[section1]
name = dicky
k2 = v2
age = [section2]
k1 = v1
work=IT
[shuaige]
name = dicky
'''
config=ConfigParser.ConfigParser()
config.read('test1')
#读取
sec=config.sections()
print sec
option=config.options('section1')
print option
item=config.items('section1')
print item
val = config.get('section1','name')
print val
val1 = config.getint('section1','age')
print val1
#修改
sec1=config.remove_section('section3') #删除色彩tion3
config.write(open('test1','w'))
# sec = config.add_section('shuaige')
# config.write(open('test1','w'))
#
# config.set('shuaige','name','dicky')
# config.write(open('test1','w')) config.remove_option('section2','work')
config.write(open('test1','w')) 结果
['section1', 'section2', 'shuaige']
['name', 'k2', 'age']
[('name', 'dicky'), ('k2', 'v2'), ('age', '')]
dicky

操作系统相关命令

os.system() #执行系统命令

其他的都废弃掉了,以后使用subprocess代替了

主要介绍subprocess

call

 subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
执行命令,返回状态码
ret = subprocess.call(["ls", "-l"], shell=False)
ret = subprocess.call("ls -l", shell=True)
shell = True ,允许 shell 命令是字符串形式,也就是使用shell来执行,一般情况下,我们要使用shell=False,也是默认的一种形式,模式就是shell=False

check_call

 subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
执行命令,如果执行状态码是 ,则返回0,否则抛异常
subprocess.check_call(["ls", "-l"])
subprocess.check_call("exit 1", shell=True)

check_output

 subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
执行命令,如果状态码是 ,则返回执行结果,否则抛异常
subprocess.check_output(["echo", "Hello World!"])
subprocess.check_output("exit 1", shell=True)
捕获异常
若要在结果中捕获标准错误,可以使用 stderr=subprocess.STDOUT
>>> subprocess.check_output(
... "ls non_existent_file; exit 0",
... stderr=subprocess.STDOUT,
... shell=True)
'ls: non_existent_file: No such file or directory\n'

Popen

 class subprocess.Popen(args, bufsize=, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=)
参数
args:shell命令,可以是字符串或者序列类型(如:list,元组)最好传入序列
bufsize:指定缓冲。 无缓冲, 行缓冲,其他 缓冲区大小,负值 系统缓冲
stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。
shell:同上
cwd:用于设置子进程的当前目录
env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
startupinfo与createionflags只在windows下有效
将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

args

如果args 是一个字符串,该字符串将解释为要执行的程序的名字或路径。然而,这只能在不传递参数给程序时可行。

如下解决

 前提是创建好文件egg.txt
>>> import shlex, subprocess
>>> command_line = raw_input()
/bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
>>> args = shlex.split(command_line)
>>> print args
['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
>>> p = subprocess.Popen(args) # Success!

简单执行命令

 ret1 = subprocess.Popen(["mkdir","t1"])
ret2 = subprocess.Popen("mkdir t2", shell=True)

Popen 类的实例具有以下方法

 Popen.poll()  检查子进程是否已经终止
Popen.wait() 等待子进程终止
Popen.communicate(input=None)
与进程交互:将数据发送到标准输入。从标准输出和标准错误读取数据,直至到达文件末尾。等待进程终止。可选的input 参数应该是一个要发送给子进程的字符串,如果没有数据要发送给子进程则应该为None。
注意如果你需要发送数据到进程的标准输入,你需要以stdin=PIPE创建Popen对象。类似地,在结果的元组中若要得到非None的数据,你还需要给出stdout=PIPE和/或stderr=PIPE。
Popen.send_signal(signal) 发送信号signal 给子进程。
Popen.terminate() 终止子进程。
Popen.kill() 杀死子进程。
Popen.stdin 如果stdin 参数为PIPE,则该属性为一个文件对象,它提供子进程的输入。否则,为None。
Popen.stdout 如果stdout 参数为PIPE,则该属性是一个文件对象,它提供子进程中的输出。否则,为None。
Popen.stderr 如果stderr 参数为PIPE,则该属性是一个文件对象,它提供子进程中的错误输出。否则,为None。
Popen.pid 子进程的进程ID。
注意如果你设置shell 参数为True,那么它是产生的shell的进程ID。

依赖,进入某环境输入

import subprocess

obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)

保存输出

 import subprocess

 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out_error_list = obj.communicate('print "hello"')
print out_error_list import subprocess obj = subprocess.Popen(["ls"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out_error_list = obj.communicate()
print out_error_list

另外一种

stdout.read()

 import subprocess

 obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
obj.stdin.write('print 1 \n ')
obj.stdin.write('print 2 \n ')
obj.stdin.write('print 3 \n ')
obj.stdin.write('print 4 \n ')
obj.stdin.close() cmd_out = obj.stdout.read()
obj.stdout.close()
cmd_error = obj.stderr.read()
obj.stderr.close() print cmd_out
print cmd_error

加密模块

md5已经废弃

 import md5
hash = md5.new()
hash.update('admin')
print hash.hexdigest()

sha废弃

 import sha
hash = sha.new()
hash.update('admin')
print hash.hexdigest()

hashlib替代了以上的加密

 import  hashlib
hash = hashlib.md5()
hash.update('admin')
print hash.hexdigest()
 sha加密
hash = hashlib.sha1()
hash.update('admin')
print hash.hexdigest()

其他的一样,就不一一列举了

以上加密算法虽然依然非常厉害,但时候存在缺陷,即:通过撞库可以反解。所以,有必要对加密算法中添加自定义key再来做加密。

import hashlib

# ######## md5 ########

hash = hashlib.md5('898oaFs09f')  #自定义的key
hash.update('admin')
print hash.hexdigest()

还不够吊?python 还有一个 hmac 模块,它内部对我们创建 key 和 内容 再进行处理然后再加密

 import hmac
h = hmac.new('wueiqi')
h.update('hellowo')
print h.hexdigest()

日志模块logging

简单用法

 import logging

 logging.basicConfig(filename='log.log',
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=) logging.debug('debug')
logging.info('info')
logging.warning('warning')
logging.error('error')
logging.critical('critical')
logging.log(,'log') 级别
CRITICAL =
FATAL = CRITICAL
ERROR =
WARNING =
WARN = WARNING
INFO =
DEBUG =
NOTSET =

详细参考链接:http://www.jianshu.com/p/feb86c06c4f4

python之旅六【第六篇】模块的更多相关文章

  1. 【Python之旅】第六篇(七):开发简易主机批量管理工具

    [Python之旅]第六篇(七):开发简易主机批量管理工具 python 软件开发 Paramiko模块 批量主机管理 摘要: 通过前面对Paramiko模块的学习与使用,以及Python中多线程与多 ...

  2. python之旅九【第九篇】socket

    什么是socket 建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket ...

  3. python之旅4[第四篇]

    常用内置函数 map  遍历序列,对序列中的每个元素操作,获取新的序列 如下 对所有元素加10 li = [,,,] def func(arg): new_list = map(func,li) pr ...

  4. 【Python之路】第六篇--Python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  5. Python之路【第六篇】:模块与包

    目录 一 模块 3.1 import 3.2 from ... import... 3.3 把模块当做脚本执行 3.4 模块搜索路径 3.5 编译python文件 3.6  标准模块 3.7  dir ...

  6. Python之路【第六篇】:socket

    Python之路[第六篇]:socket   Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字&quo ...

  7. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验六:数码管模块

    实验六:数码管模块 有关数码管的驱动,想必读者已经学烂了 ... 不过,作为学习的新仪式,再烂的东西也要温故知新,不然学习就会不健全.黑金开发板上的数码管资源,由始至终都没有改变过,笔者因此由身怀念. ...

  8. python学习之旅(十六)

    Python基础知识(15):模块 1.可以把模块想象成导入Python以增强其功能的扩展 2.任何程序都可以作为模块导入 3.导入模块并不意味着在导入的时候执行某些操作,它们主要用于定义变量.函数和 ...

  9. python成长之路第三篇(4)_作用域,递归,模块,内置模块(os,ConfigParser,hashlib),with文件操作

    打个广告欢迎加入linux,python资源分享群群号:478616847 目录: 1.作用域 2.递归 3.模块介绍 4.内置模块-OS 5.内置模块-ConfigParser 6.内置模块-has ...

随机推荐

  1. 朱晔和你聊Spring系列S1E4:灵活但不算好用的Spring MVC

    阅读PDF版本 本文会以一些例子来展现Spring MVC的常见功能和一些扩展点,然后我们来讨论一下Spring MVC好用不好用. 使用SpringBoot快速开始 基于之前的parent模块,我们 ...

  2. 升级NGINX支持HTTP/2服务端推送

    内容概览 NGINX从1.13.9版本开始支持HTTP/2服务端推送,上周找时间升级了下NGINX,在博客上试验新的特性. 升级工作主要包括: 升级NGINX 修改NGINX配置 修改wordpres ...

  3. 在Linux的Windows子系统上(WSL)使用Docker(Ubuntu)

    背景 平时开发大部人都是在提供了高效GUI的window下工作,但是真正部署环境普遍都是在Linux中,所以为了让开发环境和部署环境统一,我们需要在windows模拟LInux环境,以前我们可能通过虚 ...

  4. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 增强服务安全、阻止非授权的用户非法调用

    多一道防线,多一些安全保障,当程序发布到互联网上,再有成千上万的用户在用,总会有各种牛人出现,万一遇到破坏分子,那会有灾难性的打击. 只要跟利益有关系的,跟资金有关系,跟财务有关系,有竞争对手,软件系 ...

  5. 重装mysql后导致Navicat连接失败

    今天重装了mysql数据库,然后再使用navicat去连接数据库的时候,一直报错 1251 Client does not support authentication protocol reques ...

  6. Servlet处理GET和POST请求

    doGet() . doPost().service()方法 doGet()表示,当客户端是使用get方式请求该servlet时,那么就会触发执行doGet()方法中的代码. doPost()表示,当 ...

  7. Docker 安装和配置

    #centos 6 需要另外安装 yum install lxc libcgroup device-mapper-ecent-libs 推荐centos7 安装深事#centos 7 直接安装就好yu ...

  8. oracle创建表空间、创建用户、授权角色和导入导出用户数据

    使用数据库管理员身份登录 -- log as sysdba sqlplus / as sysdba; 创建临时表空间 -- create temporary tablespace create tem ...

  9. linux重装后配一些库

    #先要设置软件源 sudo apt-get update sudo apt-get upgrade #播放器 sudo apt-get install smplayer qt sudo apt-get ...

  10. 下拉框、下拉控件之Select2

    一.Select2的功能简介 select2插件给我们带来了更加友好的交互方式,比如查询控件展开后可通过关键字进行检索 例如: Select2也可以选择带查询控件的选择框... Select2也可以选 ...