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

python模块time&datetime&json & picle&14.logging等

2016-06-07 13:53 561 查看

本节大纲:

  1. 模块介绍
  2. time &datetime模块
  3. random
  4. os
  5. sys
  6. shutil
  7. json & picle
  8. shelve
  9. xml处理
  10. yaml处理
  11. configparser
  12. hashlib
  13. subprocess
  14. logging模块

 

 

模块,用一砣代码实现了某个功能的代码集合。 

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

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

模块分为三种:

  • 自定义模块
  • 内置标准模块(又称标准库)
  • 开源模块

自定义模块 和开源模块的使用参考 http://www.cnblogs.com/wupeiqi/articles/4963027.html 

 

 

time & datetime模块

+ View Code?
DirectiveMeaningNotes
%a
Locale’s abbreviated weekday name.  
%A
Locale’s full weekday name.  
%b
Locale’s abbreviated month name.  
%B
Locale’s full month name.  
%c
Locale’s appropriate date and time representation.  
%d
Day of the month as a decimal number [01,31].  
%H
Hour (24-hour clock) as a decimal number [00,23].  
%I
Hour (12-hour clock) as a decimal number [01,12].  
%j
Day of the year as a decimal number [001,366].  
%m
Month as a decimal number [01,12].  
%M
Minute as a decimal number [00,59].  
%p
Locale’s equivalent of either AM or PM. (1)
%S
Second as a decimal number [00,61]. (2)
%U
Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0. (3)
%w
Weekday as a decimal number [0(Sunday),6].  
%W
Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0. (3)
%x
Locale’s appropriate date representation.  
%X
Locale’s appropriate time representation.  
%y
Year without century as a decimal number [00,99].  
%Y
Year with century as a decimal number.  
%z
Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].  
%Z
Time zone name (no characters if no time zone exists).  
%%
A literal 
'%'
 character.

 

random模块

随机数

?

生成随机验证码

?

 

OS模块  

提供对操作系统进行调用的接口

?

更多猛击这里 

 

sys模块

?

 

shutil 模块

直接参考 http://www.cnblogs.com/wupeiqi/articles/4963027.html 

 

json & pickle 模块

用于序列化的两个模块

  • json,用于字符串 和 python数据类型间进行转换
  • pickle,用于python特有的类型 和 python的数据类型间进行转换

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

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

 

shelve 模块

shelve模块是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

?

  

xml处理模块

xml是实现不同语言或程序之间进行数据交换的协议,跟json差不多,但json使用起来更简单,不过,古时候,在json还没诞生的黑暗年代,大家只能选择用xml呀,至今很多传统公司如金融行业的很多系统的接口还主要是xml。

xml的格式如下,就是通过<>节点来区别数据结构的:

+ View Code?

 

xml协议在各个语言里的都 是支持的,在python中可以用以下模块操作xml   

?

修改和删除xml文档内容

+ View Code?

自己创建xml文档

?

 

PyYAML模块

Python也可以很容易的处理ymal文档格式,只不过需要安装一个模块,参考文档:http://pyyaml.org/wiki/PyYAMLDocumentation 

 

ConfigParser模块

用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser。

来看一个好多软件的常见文档格式如下

?

如果想用python生成一个这样的文档怎么做呢?

?

  

写完了还可以再读出来哈。

+ View Code?

configparser增删改查语法

+ View Code?

  

hashlib模块  

用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法

+ View Code?

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

?

更多关于md5,sha1,sha256等介绍的文章看这里https://www.tbs-certificates.co.uk/FAQ/en/sha256.html 

  

Subprocess模块 

The 

subprocess
 module allows you to spawn new processes, connect to their input/output/error pipes, and obtain their return codes. This module intends to replace several older modules and functions:

os.system
os.spawn*

The recommended approach to invoking subprocesses is to use the 

run()
 function for all use cases it can handle. For more advanced use cases, the underlying 
Popen
 interface can be used directly.

The 

run()
 function was added in Python 3.5; if you need to retain compatibility with older versions, see the Older high-level API section.

subprocess.
run
(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False)[/code]

Run the command described by args. Wait for command to complete, then return a 

CompletedProcess
 instance.

The arguments shown above are merely the most common ones, described below in Frequently Used Arguments (hence the use of keyword-only notation in the abbreviated signature). The full function signature is largely the same as that of the 

Popen
 constructor - apart from timeout, input and check, all the arguments to this function are passed through to that interface.

This does not capture stdout or stderr by default. To do so, pass 

PIPE
 for the stdout and/or stderr arguments.

The timeout argument is passed to 

Popen.communicate()
. If the timeout expires, the child process will be killed and waited for. The 
TimeoutExpired
 exception will be re-raised after the child process has terminated.

The input argument is passed to 

Popen.communicate()
 and thus to the subprocess’s stdin. If used it must be a byte sequence, or a string if 
universal_newlines=True
. When used, the internal 
Popen
 object is automatically created with
stdin=PIPE
, and the stdin argument may not be used as well.

If check is True, and the process exits with a non-zero exit code, a 

CalledProcessError
 exception will be raised. Attributes of that exception hold the arguments, the exit code, and stdout and stderr if they were captured.

 

?

 

调用subprocess.run(...)是推荐的常用方法,在大多数情况下能满足需求,但如果你可能需要进行一些复杂的与系统的交互的话,你还可以用subprocess.Popen(),语法如下:

?

可用参数:

  • args:shell命令,可以是字符串或者序列类型(如:list,元组)
  • bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
  • 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()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

终端输入的命令分为两种:

  • 输入即可得到输出,如:ifconfig
  • 输入进行某环境,依赖再输入,如:python

需要交互的命令示例

?

  

logging模块  

很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误、警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 

debug()
info()
warning()
error()
 and 
critical() 5个级别,
下面我们看一下怎么用。

最简单用法

?

看一下这几个日志级别分别代表什么意思

LevelWhen it’s used
DEBUG
Detailed information, typically of interest only when diagnosing problems.
INFO
Confirmation that things are working as expected.
WARNING
An indication that something unexpected happened, or indicative of some problem in the near future (e.g. ‘disk space low’). The software is still working as expected.
ERROR
Due to a more serious problem, the software has not been able to perform some function.
CRITICAL
A serious error, indicating that the program itself may be unable to continue running.

  

如果想把日志写到文件里,也很简单

?

其中下面这句中的level=loggin.INFO意思是,把日志纪录级别设置为INFO,也就是说,只有比日志是INFO或比INFO级别更高的日志才会被纪录到文件里,在这个例子, 第一条日志是不会被纪录的,如果希望纪录debug的日志,那把日志级别改成DEBUG就行了。

?

感觉上面的日志格式忘记加上时间啦,日志不知道时间怎么行呢,下面就来加上!

?

  

如果想同时把log打印在屏幕和文件日志里,就需要了解一点复杂的知识 了

The logging library takes a modular approach and offers several categories of components: loggers, handlers, filters, and formatters.

  • Loggers expose the interface that application code directly uses.
  • Handlers send the log records (created by loggers) to the appropriate destination.
  • Filters provide a finer grained facility for determining which log records to output.
  • Formatters specify the layout of log records in the final output.

 

+ View Code?

  

 

本节作业

作业需求:

模拟实现一个ATM + 购物商城程序

  1. 额度 15000或自定义
  2. 实现购物商城,买东西加入 购物车,调用信用卡接口结账
  3. 可以提现,手续费5%
  4. 每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息
  5. 支持多账户登录
  6. 支持账户间转账
  7. 记录每月日常消费流水
  8. 提供还款接口
  9. ATM记录操作日志
  10. 提供管理接口,包括添加账户、用户额度,冻结账户等。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: