Python开发基础 day12 模块2

sys模块

sys模块提供了一系列有关Python运行环境的变量和函数。

1 #重点记忆
2 sys.argv           #命令行参数List,第一个元素是程序本身路径
3 sys.exit(n)        #退出执行的程序未见,正常退出时exit(0),不同于循环用的break跳出循环
4 sys.path           #返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
5
6 #一般
7 sys.platform       #返回操作系统平台名称
8 sys.version        #获取Python解释程序的版本信息
9 sys.maxint         #最大的Int值

详细说明:

sys.argv方法:返回值为命令行操作的列表,模拟sql登录代码

 1 res=sys.argv
 2 print(res)
 3 username=res[2]
 4 password=res[4]
 5 if res[1] == ‘-u‘ and res[3] == ‘-p‘:
 6     if username == ‘bob‘ and password == ‘123‘:
 7         print(‘loging successful‘)
 8 else:
 9     print(‘格式不对‘)
10
11 cmd调用
12 C:\Users\Mr.chai\Desktop\PythonProject\笔记\2017.6.22>python 模块2.py -u bob -p 123
13 [‘模块2.py‘, ‘-u‘, ‘bob‘, ‘-p‘, ‘123‘]  #sys.argv返回值
14 loging successful

sys.path:返回模块的搜索路径,初始化时用PYTHONPATH环境变量的值

1 #pycharm下执行
2 print(sys.path)
3 输出结果:
4 [‘C:\\Users\\Mr.chai\\Desktop\\PythonProject\\笔记\\2017.6.22‘, ‘C:\\Users\\Mr.chai\\Desktop\\PythonProject‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘]
5
6 #cmd下执行
7 C:\Users\Mr.chai\Desktop\PythonProject\笔记\2017.6.22>python 模块2.py
8 [‘C:\\Users\\Mr.chai\\Desktop\\PythonProject\\笔记\\2017.6.22‘, ‘C:\\Python36\\python36.zip‘, ‘C:\\Python36\\DLLs‘, ‘C:\\Python36\\lib‘, ‘C:\\Python36‘, ‘C:\\Python36\\lib\\site-packages‘]

pycharm下执行的‘C:\\Users\\Mr.chai\\Desktop\\PythonProject‘是pycharm给加的,以cmd下调用为准

找模块的优先级:内置模块(即python解释器下的目录)---第三方模块和自定义模块,会统一按照一个路径去找(执行文件或者导入会将目录加到sys.path下,默认加到前面)

导入自定义模块的时候,如果模块名和python解释器下的第三方模块冲突会优先到当前导入自定义模块目录文件下找。

内置模块:sys、time、os模块(测试的不太确认)

当自定义的模块需要跨目录调用的时候,需要在调用的py文件下手动加上要调用的模块的目录:

1 sys.path.append(‘module路径‘)

logging模块

默认情况下Python的logging模块将日志打印到了标准输出中,且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING(日志级别等级CRITICAL > ERROR > WARNING > INFO > DEBUG),默认的日志格式为日志级别:Logger名称:用户输出消息。

默认日志会输出到当前屏幕终端

1 import logging
2 logging.debug(‘debug message‘)
3 logging.info(‘info message‘)
4 logging.warning(‘warning message‘)
5 logging.error(‘error message‘)
6 logging.critical(‘critical message‘)  

日志格式配置(不推荐该配置方式):

 1 import logging
 2 logging.basicConfig(level=logging.DEBUG,  #默认级别设置
 3                     format=‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,    #日志输出格式
 4                     datefmt=‘%a, %d %b %Y %H:%M:%S‘,    #时间输出格式
 5                     filename=‘/tmp/test.log‘,    #日志输出目录
 6                     filemode=‘w‘)    #文件写入权限,a或w
 7
 8 logging.debug(‘debug message‘)
 9 logging.info(‘info message‘)
10 logging.warning(‘warning message‘)
11 logging.error(‘error message‘)
12 logging.critical(‘critical message‘)

配置参数:

 1 logging.basicConfig()函数中可通过具体参数来更改logging模块默认行为,可用参数有:
 2
 3 filename:用指定的文件名创建FiledHandler,这样日志会被存储在指定的文件中。
 4 filemode:文件打开方式,在指定了filename时使用这个参数,默认值为“a”还可指定为“w”。
 5 format:指定handler使用的日志显示格式。
 6 datefmt:指定日期时间格式。
 7 level:设置rootlogger(后边会讲解具体概念)的日志级别
 8 stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件(f=open(‘test.log’,’w’)),默认为sys.stderr。若同时列出了filename和stream两个参数,则stream参数会被忽略。
 9
10 format参数中可能用到的格式化串:
11 %(name)s Logger的名字
12 %(levelno)s 数字形式的日志级别
13 %(levelname)s 文本形式的日志级别
14 %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
15 %(filename)s 调用日志输出函数的模块的文件名
16 %(module)s 调用日志输出函数的模块名
17 %(funcName)s 调用日志输出函数的函数名
18 %(lineno)d 调用日志输出函数的语句所在的代码行
19 %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
20 %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
21 %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
22 %(thread)d 线程ID。可能没有
23 %(threadName)s 线程名。可能没有
24 %(process)d 进程ID。可能没有
25 %(message)s用户输出的消息

日志对象配置:(推荐日志配置方式)

 1 #使用logger对象
 2 logger_obj=logging.getLogger()
 3
 4 # 屏幕输出流
 5 cp=logging.StreamHandler()
 6 # 文件输出流
 7 fp=logging.FileHandler(‘logger.txt‘)
 8
 9 #定义格式对象
10 formatter=logging.Formatter(‘%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘)
11
12 #设置格式
13 cp=cp.setFormatter(formatter)
14 fp=fp.setFormatter(formatter)
15
16 #定义默认级别
17 logger_obj.setLevel(logging.DEBUG)
18
19 #输出流定义
20 logger_obj.addHandler(fp)
21 logger_obj.addHandler(cp)
22
23 logger_obj.debug(‘log info‘)
24 logger_obj.info(‘log error‘)
25 logger_obj.warning(‘log error‘)
26 logger_obj.error(‘log error‘)
27 logger_obj.critical(‘log error‘)

logging库提供了多个组件:Logger、Handler、Filter、Formatter。Logger对象提供应用程序可直接使用的接口,Handler发送日志到适当的目的地,Filter提供了过滤日志信息的方法,Formatter指定日志显示格式。另外,可以通过:logger.setLevel(logging.Debug)设置级别。

序列化模块

把对象(变量)从内存中变成可存储或传输的过程称之为序列化

python内部使用的序列化模块是pickle模块,而不同编程语言之间使用的是json模块

json模块

如果我们要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。

JSON表示的对象就是标准的JavaScript语言的对象一个子集,JSON和Python内置的数据类型对应如下:

 1 #----------------------------序列化
 2 import json
 3 dic={‘name‘:‘alvin‘,‘age‘:23,‘sex‘:‘male‘}
 4 print(type(dic))#<class ‘dict‘>
 5 data=json.dumps(dic)
 6 print("type",type(data))#<class ‘str‘>
 7 print("data",data)
 8 f=open(‘序列化对象‘,‘w‘)
 9 f.write(data)  #等价于json.dump(dic,f),等同于打开文件和写入文件两步
10 f.close()
11
12 #-----------------------------反序列化<br>
13 import json
14 f=open(‘序列化对象‘)
15 new_data=json.loads(f.read())#  等价于data=json.load(f),打开文件和读数据
16 print(type(new_data))

pickle模块

 1 ##----------------------------序列化
 2 import pickle
 3 dic={‘name‘:‘alvin‘,‘age‘:23,‘sex‘:‘male‘}
 4 print(type(dic))#<class ‘dict‘>
 5 j=pickle.dumps(dic)
 6 print(type(j))#<class ‘bytes‘>
 7 f=open(‘序列化对象_pickle‘,‘wb‘)#注意是w是写入str,wb是写入bytes,j是‘bytes‘
 8 f.write(j)  #-------------------等价于pickle.dump(dic,f)
 9 f.close()
10
11 #-------------------------反序列化
12 import pickle
13 f=open(‘序列化对象_pickle‘,‘rb‘)
14 data=pickle.loads(f.read())#  等价于data=pickle.load(f)
15 print(data[‘age‘])    

时间: 2024-08-28 10:57:47

Python开发基础 day12 模块2的相关文章

Python开发基础 day11 模块1

time模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. (2)格式化的时间字符串(Format String): '1988-03-16' (3)元组(struct_time) :struct_time元组共有9个元素共九个元素:

Python开发基础-Day14正则表达式和re模块

正则表达式 就其本质而言,正则表达式(或 re)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行. 字符匹配(普通字符,元字符): 1 普通字符(完全匹配):大多数字符和字母都会和自身匹配 1 >>> import re 2 >>> res='hello world good morning' 3 >>> re.findall(

Python开发基础-Day15正则表达式爬虫应用,configparser模块和subprocess模块

正则表达式爬虫应用(校花网) 1 import requests 2 import re 3 import json 4 #定义函数返回网页的字符串信息 5 def getPage_str(url): 6 page_string=requests.get(url) 7 return page_string.text 8 9 hua_dic={} 10 def run_re(url): #爬取名字.学校和喜爱的人数 11 hua_str=getPage_str(url) 12 hua_list=r

Python开发基础-Day23try异常处理、socket套接字基础1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异

Python开发基础--- Event对象、队列和多进程基础

Event对象 用于线程间通信,即程序中的其一个线程需要通过判断某个线程的状态来确定自己下一步的操作,就用到了event对象 event对象默认为假(Flase),即遇到event对象在等待就阻塞线程的执行. 示例1:主线程和子线程间通信,代码模拟连接服务器 1 import threading 2 import time 3 event=threading.Event() 4 5 def foo(): 6 print('wait server...') 7 event.wait() #括号里可

Python开发基础-Day31 Event对象、队列和多进程基础

Event对象 用于线程间通信,即程序中的其一个线程需要通过判断某个线程的状态来确定自己下一步的操作,就用到了event对象 event对象默认为假(Flase),即遇到event对象在等待就阻塞线程的执行. 示例1:主线程和子线程间通信,代码模拟连接服务器 1 import threading 2 import time 3 event=threading.Event() 4 5 def foo(): 6 print('wait server...') 7 event.wait() #括号里可

Python开发基础----异常处理、socket套接字基础1

异常处理 错误 程序里的错误一般分为两种: 1.语法错误,这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正 2.逻辑错误,人为造成的错误,如数据类型错误.调用方法错误等,这些解释器是不会进行检测的,只有在执行的过程中才能抛出的错误 异常 异常是python解释器在运行程序的过程中遇到错误所抛出的信息,如: Python异常种类: 常用异常: 1 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x 2 IOError 输入/输出异

Python开发基础-Day18继承派生、组合、接口和抽象类

类的继承与派生 经典类和新式类 在python3中,所有类默认继承object,但凡是继承了object类的子类,以及该子类的子类,都称为新式类(在python3中所有的类都是新式类) 没有继承object类的子类成为经典类(在python2中,没有继承object的类,以及它的子类,都是经典类) 1 class People: 2 pass 3 class Animal: 4 pass 5 class Student(People,Animal): #People.Animal称为基类或父类,

Python开发基础-Day1-python入门

编程语言分类 机器语言 使用二进制代码直接编程,直接与硬件交互,执行速度非常快,灵活,但是开发难度高,开发效率低下,缺乏移植性. 汇编语言 对机器语言指令进行了英文封装,较机器语言容易记忆,直接与硬件交互,执行速度快,执行文件小,但是开发难度相对也很高,开发效率低 高级语言 语法简单,容易理解,开发难度低效率高,开发后测试方便,但是开发的程序需要经过转换才能执行,所以执行效率相对慢,可移植性高. 解释执行:代码执行时候,解释器按照源代码文件中的内容,一条条解释并运行,相对编译执行速度慢,但出错方