python学习第六课 --常用模块

常用模块

sys

sys.argv  命令行参数列表,第一个元素是程序本身路径

sys.exit(n)  退出程序,正常退出时exit(0)

sys.version

sys.maxint  最大的int值 

sys.path 返回模块的搜索路径

sys.paltform

sys.stdout.wirte(“hello”)

val = sys.stdin.readline()[:-1]

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=10)

logging.debug(‘debug‘)

logging.info(‘info‘)

logging.warning(‘warning‘)

logging.error(‘error‘)

logging.critical(‘critical‘)

logging.log(10,‘log‘)

对于等级,只有大于当前日志等级的操作才会被记录

       CRITICAL = 50

FATAL = CRITICAL

ERROR = 40

WARNING = 30

WARN = WARNING

INFO = 20

DEBUG = 10

NOTSET = 0

json pickle

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

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

dumps,dump,loads,load

data = dict(k1=123,k2=’hello’)

json.dumps(data)  --- ‘{"k2": "hello", "k1": 123}‘

type(json.dumps(data)   ---<type ‘str‘>

json.dumps(data) 将数据通过形式转换为所有程序语言都认识的字符串

json.dump(data,fp) fp为文件句柄,可以直接将data转换并写入文件

json.loads() 是将字符串转为python的数据类型,如将文件中的格式化的内容转为python的类型

json.loads(fp.read()) 或者 json.load(fp)  --loads()的参数是字符串,而load是文件句柄

json.dumps 提供了很多好用的参数,常用的有sort_keys  separators, indent

json.dumps(data,sort_keys=True)

json.dumps(data,indent=4)  带缩进,数据存储时比较好看

json.dumps(data,separator=(‘,’,’:’))  separators传进来的元组参数指明了data元素的分隔符,If ``separators`` is an ``(item_separator, dict_separator)`` tuple,then it will be used instead of the default ``(‘, ‘, ‘: ‘)`` separators. ``(‘,‘, ‘:‘)`` is the most compact JSON representation.separators必须为元组类型

   --如果data为列表,json.dumps(data,separators=(‘’,’’)) 会将列表的元素合并为一个

subprocess执行系统命令    

subprocess.call  执行命令,返回状态码,0为正确,1为有误

ret = subprocess.call([“ls”,”-l”])  --windows下需要加上shell=True

ret = subprocess.call(“ls –l”,shell =True)  shell = True,允许shell命令是字符串形式,不建议使用字符串形式,有安全隐患

subprocess.check_call执行命令,如果状态码是0则返回0,否则抛异常

subprocess.check_output 执行命令,如果状态码是0则返回执行结果,否则抛异常

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()函         数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等

communicate(input = None)  与进程交互,发送数据到stdin。从stdout和stderr中读取数据,直到结束。等待进程结束。可选的input是发送到了进程的字符串,如果没有数据发送给子进程,则input为空。它返回元组(stdout,stderr)

kill() 用sigkill杀掉进程

poll()

terminamte()  用sigterm中断进程

wait() 等待子进程中断,返回returncode

import subprocess

obj = subprocess.Popen([‘ls’,’-l‘]) 

–生成一个子进程执行ls –l, 此时obj是Popen的一个对象

print obj  --<subprocess.Popen object at 0x139f990>

obj.pid  --5634  这个子进程的pid,此时进程还存在,只有执行了其它的subprocess           的命令,这个子进程才会结束

stdin, stdout, stderr:分别表示子进程的标准输入、输出、错误句柄,可以利用PIPE              将它们连接在一起,构成管道

obj = subprocess.Popen([‘python’],stdin=subprocess.PIPE,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

obj.stdin.write(‘print 1\n’)

obj.stdin.close()

print obj.stdout.read()

obj.stdout.close()

生成一个python进程,输入输出和出错都写到管道里,其实也是文件,当stdin.write             只是写入,并没有执行,只有当stdin.close()的时候,才执行,然后stdout.read()

才能读出来(stdin  stdout stderr分别为三个文件)

利用 communicate可以简化这个过程

obj = subprocess.Popen([‘python’],stdin=subprocess.PIPE,

stdout=subprocess.PIPE,

stderr=subprocess.PIPE)

out_error_list = obj.communicate(‘print  1\n’)

print out_error_list

也可以利用管道将多个子进程的输入输出连接在一起

import subprocess

child1 = subprocess.Popen(["cat","/etc/passwd"], stdout=subprocess.PIPE)

child2 = subprocess.Popen(["grep","0:0"],stdin=child1.stdout, stdout=subprocess.PIPE)

out = child2.communicate()

print out

stdout=open(‘/dev/null’,’w’) stderr = subprocess.stdout 会将错误输出和正常输出到/dev/null(黑洞),就是不要输出

正则表达式

字符:

. 匹配除换行符以外的任意字符

\w 匹配字母或数字或下划线或汉字

\s  匹配任意的空白字符

\d     匹配数字

\b     匹配单词的开始或结束

^       匹配字符串的开始

$       匹配字符串的结束

次数:

* 重复零次或多次

+ 重得一次或多次

? 重复零次或一次

{n} 重复N次

{n,} 重复N次或更多

{n,m} 重复N到M次

re.match(pattern,string,flag=0)

从起始位置开始匹配,匹配单个

>>> re.match(‘\d+‘,‘12uu456‘).group()

‘12‘

>>> re.match(‘\d+‘,‘uu456‘).group()

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

AttributeError: ‘NoneType‘ object has no attribute ‘group‘

re.search(pattern,string,flags=0)

根据匹配规则去字符串中匹配,匹配单个

>>> re.search(‘\d+‘,‘12uu456‘).group()

‘12‘

>>> re.search(‘\d+‘,‘uu456‘).group()

‘456‘

group 与 groups

>>> a = "123abc456hello"

>>> print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group()

123abc456

>>> print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0)

123abc456

>>> print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(1)

123

>>> print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(2)

abc

>>> print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(3)

456

>>> print re.search("([0-9]*)([a-z]*)([0-9]*)", a).groups()

(‘123‘, ‘abc‘, ‘456‘)

>>> print re.search("([0-9]*)([a-z]*)([0-9]*)", a).group(0,1,2,3,)

(‘123abc456‘, ‘123‘, ‘abc‘, ‘456‘)

这里的匹配规则是由三部分组成,找到的结果也会生成一个group元组,            group(1) group(2) group(3)是满足这三部分条件的值

re.findall

  re.findall(pattern,string,flags=0)

找到字符串中所有匹配规则的元素,返回列表

>>> a

‘123abc456hello‘

>>> print re.findall(‘\d+‘,a)

[‘123‘, ‘456‘]

>>> print re.findall(‘\d‘,a)

[‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘]

>>> print re.findall(‘[a-z]+‘,a)

[‘abc‘, ‘hello‘]

>>> print re.findall(‘[a-z]+\d*‘,a)

[‘abc456‘, ‘hello‘]

re.split(pattern,string,maxsplit=0,flags=0)

根据匹配规则进行分组

>>> content = ‘1-2 *((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )‘

>>> re.split(‘\*‘, content)

[‘1 - 2 ‘, ‘ ((60-30+1‘, ‘(9-2‘, ‘5/3+7/3‘, ‘99/4‘, ‘2998+10‘, ‘568/14))-(-4‘, ‘3)/(16-3‘, ‘2) )‘]

>>> re.split(‘\*‘, content,1)

[‘1 - 2 ‘, ‘ ((60-30+1*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )‘]

>>> re.split(‘\*‘, content,2)

[‘1 - 2 ‘, ‘ ((60-30+1‘, ‘(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2) )‘]

maxsplit默认为0时,全部分割;为1时,只分割一次,为2时,分割2次…

re.sub(pattern,repl,string,count=0,flags=0)

>>> a = ‘123abc456edg789hij‘

>>> re.sub(‘\d+‘,‘x‘,a)

‘xabcxedgxhij‘

>>> re.sub(‘\d+‘,‘x‘,a,count=1)

‘xabc456edg789hij‘

>>> re.sub(‘\d+‘,‘x‘,a,count=2)

‘xabcxedg789hij‘

time    

时间戳  time.time()

格式化的字符串  strftime(‘%Y-%m-%d’)

结构化时间  tme.localtime()   包含了年月日小时分钟秒星期一年中的第几天是否是夏令时

时间戳

print time.time()

print time.mktime(time.localtime())

格式化时间

print time.gmtime()    #可加时间戳参数 世界标准时间

print time.localtime() #可加时间戳参数  本地时区时间

print time.strptime(‘2014-11-11‘, ‘%Y-%m-%d‘)

字符串

print time.strftime(‘%Y-%m-%d‘) #默认当前时间

print time.strftime(‘%Y-%m-%d‘,time.localtime()) #默认当前时间

print time.asctime() 转换时间元组成字符串,默认为time.localtime,    转换后的格式与ctime的一样

print time.asctime(time.localtime())

print time.ctime(time.time()) 转换时间戳成字符串,转换后的格式为

>>> time.ctime(time.time())

‘Wed Dec  9 01:57:24 2015‘

时间戳转为格式化字符串

>>> time.strftime(‘%Y-%m-%d %H:%M:%S‘,time.localtime(time.time()))

‘2015-12-09 01:45:27

格式化字符串转时间戳

>>> time.mktime(time.strptime(‘2015-10-10‘,‘%Y-%m-%d‘))

1444406400.0

strftime的格式字符意义

%a星期的简写。如星期三为Web

%A星期的全写。如星期三为Wednesday

%b月份的简写。如4月份为Apr

%B月份的全写。如4月份为April

%c: 日期时间的字符串表示。(如: 04/07/10 10:43:39)

%d: 日在这个月中的天数(是这个月的第几天)

%f: 微秒(范围[0,999999])

%H: 小时(24小时制,[0, 23])

%I: 小时(12小时制,[0, 11])

%j: 日在年中的天数 [001,366](是当年的第几天)

%m: 月份([01,12])

%M: 分钟([00,59])

%p: AM或者PM

%S: 秒(范围为[00,61],为什么不是[00, 59],参考python手册~_~)

%U: 周在当年的周数当年的第几周),星期天作为周的第一天

%w: 今天在这周的天数,范围为[0, 6],6表示星期天

%W: 周在当年的周数(是当年的第几周),星期一作为周的第一天

%x: 日期字符串(如:04/07/10)

%X: 时间字符串(如:10:43:39)

%y: 2个数字表示的年份

%Y: 4个数字表示的年份

%z: 与utc时间的间隔(如果是本地时间,返回空字符串)

%Z: 时区名称(如果是本地时间,返回空字符串)

datetime

datetime.date  表示日期的类,常用属性有year month day

datetime.time  表示时间的类,常用属性有hour minute second microsecond

datetime.datetime  表示日期时间

datetime.timedelta 表示时间间隔 有day seconds microseconds,minutes hours weeks

使用

from datetime import datetime

>>> datetime.now()

datetime.datetime(2015, 12, 9, 11, 22, 11, 407513)

>>> datetime.today()

datetime.datetime(2015, 12, 9, 11, 22, 13, 134834)

>>> datetime.weekday(datetime.now())     Monday == 0 ... Sunday == 6

2

>>> datetime.isoweekday(datetime.now())   Monday == 1 ... Sunday == 7

3

>>> datetime.date(datetime.now()).isoweekday()

3

>>> datetime.isocalendar(datetime.now())

--Return a 3-tuple containing ISO year, week number, and weekday

(2015, 50, 3)

>>> datetime.date(datetime.now())

datetime.date(2015, 12, 9)

>>> type(datetime.date(datetime.now()))

<type ‘datetime.date‘>

>>> datetime.date(datetime.now()).year

2015

>>> type(datetime.date(datetime.now()).year)

<type ‘int‘>

>>> datetime.date(datetime.now()).month

12

>>> datetime.date(datetime.now()).day

9

datetime.time与上面的类似

>>> datetime.strftime(datetime.today(),‘%Y-%m-%d‘)

‘2015-12-09‘

求某一天是星期几

>>> datetime.strptime(‘2015-10-10‘,‘%Y-%m-%d‘).isoweekday()

6

求某一天是那年中的第几天

>>> datetime.strptime(‘2015-10-10‘,‘%Y-%m-%d‘).timetuple().tm_yday

283

--strptime将字符串转换成datetime.datetime类型

--timetuple() 将datetime.datetime转换成time.struct_time

--tm_yday取出第几天

replace

datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]]):

>>> datetime.date(datetime.now())

datetime.date(2015, 12, 9)

>>> datetime.date(datetime.now()).replace(day=10)

datetime.date(2015, 12, 10)

datetime.timedelta

import datetime

>>> print datetime.datetime.now() - datetime.timedelta(days=5)  --weeks hours minutes seconds

2015-12-04 15:30:39.536391

>>>

   参考:http://www.jb51.net/article/31129.htm

shutil

高级的文件、文件夹、压缩包处理模块(都在什么情况下使用?)

shutil.copyfileobj(fsrc,fdes[,length])  --拷贝文件内容 这里的fsrc fdesc是文件句柄

shutil.copyfile(src,dst)   ――拷贝文件 这里的src dst是文件名

shutil.copymode(src,dst)  仅拷贝权限,内容、组、用户均不变

shutil.copystat(src,dst)           仅拷贝状态信息,包括 mode bits,atime,mtime,flags

shutil.copy(src,dst)        拷贝文件和权限

shutil.copy2(src,dst)   拷贝文件和状态信息

shutil.ignore_patterns(*patterns)

shutil.copytree(src,dst,symlinks=False,ignore=None) 递归的去拷贝文件夹(有空研究一下ignore的用法)

shutil.rmtree(path[,ignore_errors[,onerror]])  递归的删除文件夹  --相当于 rm –r

shutil.move(src,dst)  递归的移动一个文件或者文件夹去另一个地方,相当于mv,如果dst文件夹已存在,就将src移动到dst下

make_archive(base_name, format, root_dir=None, base_dir=None, verbose=0, dry_run=0, owner=None, group=None, logger=None) 创建压缩包并返回文件路径,

base_name 压缩包的文件名

format    压缩包格式  zip  tar  bztar gztar

root_dir  要压缩的文件夹路径 默认为当前目录

base_dir  要开始压缩的起始路径

owner,group是创建压缩包时用户和组,默认为当前的

logger  用于记录日志,通常是logging.logger的对象

其实是调用ZipFile和TarFile来处理的

面向对象

class Person(object):      --类 

def __init__(self,name):  --初始化函数

self.name = name   --

print ‘---àcreate :’,name

def say_name(self):   --方法

print ‘my name is %s’ %self.name

p1 = Person(‘gf1’)        --实例化

p2 = Person(‘gf2’)

p1.say_name()   --person.say_name(p1)

p2.say_name()   --person.say_name(p2)

代码重用 

时间: 2024-11-13 04:41:42

python学习第六课 --常用模块的相关文章

Python学习笔记六(常用模块、面向对象基础)

一.random模块 import random print(random.random()) #0-1之间的小数 print(random.randint(1,5)) #1-5之间(包括1和5)的整数 print(random.randrange(1,5)) #1-5之间(包含1,不好包含5)的整数 print(random.choice(['a','b','c'])) #给定列表中任意元素 print(random.sample(['a','b','c','d'],2)) #给定列表中任意n

Python学习之路13?常用模块

一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型. 格式化的时间字符串(Format String) 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) 1 import time 2 #

Python学习—基础篇之常用模块

常用模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. python常用模块主要有: 1. time模块 2. random模块 3. hashlib模块 4. os模块 5. sys模块 6. logging模块 7. 序列化模块 8. configpar

【29】Python浅入六个常用模块

1.使用copy模块copy模块包含了制作对象的拷贝的函数.当写程序时,有时候你可能需要多个相同的对象.这时候就可以用copy模块进行拷贝.例如:我们创建一个Ad类,它有一个init函数,参数为name(名字),school_record(学习成绩),color(颜色) class Ad: def __init__(self,name,school_record,color): self.name=name self.school_record=school_record self.color=

python学习第六课 --面向对象

面向对象 class Person(object): --类 def __init__(self,name): --初始化函数 构造方法 self.name = name -- print '---create :',name def say_name(self): --方法 print 'my name is %s' %self.name p1 = Person('gf1')        --实例化 p2 = Person('gf2') p1.say_name()   --person.sa

Python第十六课(模块3)

Python第十六课(模块3)    >>>思维导图>>>中二青年 模块与包 模块 """ 三种来源 1.内置的 2.第三方的 3.自定义的 四种表示形式 1.py文件(******) 2.共享库 3.文件夹(一系列模块的结合体)(******) 4.C++编译的连接到python内置的 """ 导入模块 """ 先产生一个执行文件的名称空间 1.创建模块文件的名称空间 2.执行模

学习Python必须要知道的常用模块

在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分.本文为你介绍了Python中的两种常用模块. os: 这个模块包含普遍的操作系统功能.利用这个模块可以写出与平台无关的程序,比如就是使用os.sep可以取代操作系统特定的路径分割符. 列举一些os模块中常用的方法: os.name:获取当前系统平台,Windows下返回'nt',Linux下返回'posix'. os.linesep:获取当前平台使用的行终止符.Windo

python学习第四十八天json模块与pickle模块差异

在开发过程中,字符串和python数据类型进行转换,下面比较python学习第四十八天json模块与pickle模块差异. json 的优点和缺点 优点  跨语言,体积小 缺点 只能支持 int str list tuple dict pickle 的优点和缺点 优点 专门为python设计,支持python所有的数据类型 缺点 只能python使用,存储数据占空间大 文章来自 www.96net.com.cn 原文地址:https://www.cnblogs.com/96net/p/97806

python学习笔记(六):常用模块

一.模块.包 什么是模块? 模块实质上就是一个python文件,它是用来组织代码的,意思就是说把python代码写到里面,文件名就是模块的名称,test.py test就是模块名称. 什么是包? 包,package本质就是一个文件夹,和文件夹不一样的是它有一个__init__.py文件,包是从逻辑上来组织模块的,也就是说它是用来存放模块的,如果你想导入其他目录下的模块,那么这个目录必须是一个包才可以导入. 导入模块 1 2 3 4 5 import module #导入模块 from modul