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. Java线程和线程池

    Android中创建线程的方式有,new Thread,new Thread(Runnable),new Thread(Callable)的形式. A. 直接new Thread简单方便. B. ne ...

  2. bootstrap 失效的原因

    首先必须对着官方文档的模板来写: https://getbootstrap.com/docs/4.3/getting-started/introduction/ 然后: 这里必须加上 rel=&quo ...

  3. Project Tungsten:让Spark将硬件性能压榨到极限(转载)

    在之前的博文中,我们回顾和总结了2014年Spark在性能提升上所做的努力.本篇博文中,我们将为你介绍性能提升的下一阶段——Tungsten.在2014年,我们目睹了Spark缔造大规模排序的新世界纪 ...

  4. 腾讯 Omi 5.0 发布 - Web 前端 MVVM 王者归来,mappingjs 强力加持

    写在前面 腾讯 Omi 框架正式发布 5.0,依然专注于 View,但是对 MVVM 架构更加友好的集成,彻底分离视图与业务逻辑的架构. 你可以通过 omi-cli 快速体验 MVVM: $ npm ...

  5. UWP 自定义控件:了解模板化控件 系列文章

    UWP自定义控件的入门文章 [UWP 自定义控件]了解模板化控件(1):基础知识 [UWP 自定义控件]了解模板化控件(2):模仿ContentControl [UWP 自定义控件]了解模板化控件(2 ...

  6. Python_每日习题_0005_三数排序

    # 题目: # 输入三个整数x,y,z,请把这三个数由大到小输出. # 程序分析: 练练手就随便找个排序算法实现一下,偷懒就直接调用函数. #方法一:排序 raw = [] for i in rang ...

  7. HDU - 1255 扫描线+离散化进阶

    这道题最开始我以为和HDU - 1542 那道题一样,只需要把cover次数改成2次即可,但是后面仔细一想,我们需要求的是覆盖次数大于等于2次的,这样的话,我们需要维护两个长度,HDU-1542 由于 ...

  8. js变量以及其作用域

    一.变量的类型  Javascript和Java.C这些语言不同,它是一种无类型.弱检测的语言.它对变量的定义并不需要声明变量类型,我们只要通过赋值的形式,可以将各种类型的数据赋值给同一个变量.例如: ...

  9. 使用junit测试

    package creeper; import java.util.Scanner; public class size { private static int intercePosition = ...

  10. js中的call、apply、bind

    在js中每个函数都包含两个非继承而来的方法:call()和apply() call和apply的作用都是在特定的作用域中将函数绑定到另外一个对象上去运行,即可以用来重新定义函数的执行环境,两者仅在定义 ...