常用模块一

一、什么是模块

什么是模块?

常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

但其实import加载的模块分为四个通用类别: 

  1 使用python编写的代码(.py文件)

  2 已被编译为共享库或DLL的C或C++扩展

  3 包好一组模块的包

  4 使用C编写并链接到python解释器的内置模块

为何要使用模块?

如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。

随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用。

二、常用模块一

2.1 collections模块

在内置数据类型(dict、list、set、tuple)的基础上,collections模块还提供了几个额外的数据类型:Counter、deque、defaultdict、namedtuple和OrderedDict等。

  1.namedtuple: 生成可以使用名字来访问元素内容的tuple

  2.deque: 双端队列,可以快速的从另外一侧追加和推出对象

  3.Counter: 计数器,主要用来计数

  4.OrderedDict: 有序字典

  5.defaultdict: 带有默认值的字典

2.1.1 namedtuple

我们知道tuple可以表示不变集合,例如,一个点的二维坐标就可以表示成:

>>> p = (1, 2)

但是,看到(1, 2),很难看出这个tuple是用来表示一个坐标的。

这时,namedtuple就派上了用场:

>>> from collections import namedtuple
>>> point = namedtuple(‘point‘,[‘x‘,‘y‘])
>>> p=point(1,2)
>>> p.x
1
>>> p.y
2

类似的,如果用半径和坐标表示成一个圆,也可以用namedtuple来定义:

#namedtuple(‘名称‘, [属性list]):
Circle = namedtuple(‘Circle‘, [‘x‘, ‘y‘, ‘r‘])

2.1.2 deque

使用list存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list是线性存储,数据量大的时候,插入和删除效率很低。

deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:

>>> from collections import deque
>>> q = deque([‘a‘,‘b‘,‘c‘])
>>> q.append(‘x‘)
>>> q.appendleft(‘y‘)
>>> q
deque([‘y‘, ‘a‘, ‘b‘, ‘c‘, ‘x‘])

deque除了实现list的append()pop()外,还支持appendleft()popleft(),这样就可以非常高效地往头部添加或删除元素。

2.1.3 OrderedDict

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

如果要保持Key的顺序,可以用OrderedDict

>>> from collections import OrderedDict
>>> d=dict([(‘a‘,1),(‘b‘,2),(‘c‘,3)])
>>> od = OrderedDict([(‘a‘,1),(‘b‘,2),(‘c‘,3)])
>>> od
OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])
>>> od = OrderedDict()
>>> od[‘z‘]=1
>>> od[‘y‘]=2
>>> od[‘x‘]=3
>>> od.keys()
odict_keys([‘z‘, ‘y‘, ‘x‘])

2.1.4 defaultdict

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

即: {‘k1‘: 大于66 ‘k2‘: 小于66}

li = [11,22,33,44,55,66,77,88,99,90]
dic = {}
for i in li:
    if i>66:
        if  ‘k1‘ in dic.keys():
            dic[‘k1‘].append(i)
        else:
            dic[‘k1‘]=[i]
    else:
        if  ‘k2‘ in dic.keys():
            dic[‘k2‘].append(i)
        else:
            dic[‘k2‘] = [i]
print(dic)

原生字典解决办法

from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict[‘k1‘].append(value)
    else:
        my_dict[‘k2‘].append(value)

defaultdict字典解决方法

使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict

>>> from collections import defaultdict
>>> dd = defaultdict(lambda: ‘N/A‘)
>>> dd[‘key1‘] = ‘abc‘
>>> dd[‘key1‘] # key1存在
‘abc‘
>>> dd[‘key2‘] # key2不存在,返回默认值
‘N/A‘

示例

2.1.5 Counter

Counter类的目的是用来跟踪值出现的次数。它是一个无序的容器类型,以字典的键值对形式存储,其中元素作为key,其计数作为value。计数值可以是任意的Interger(包括0和负数)。Counter类和其他语言的bags或multisets很相似。

c = Counter(‘abcdeabcdabcaba‘)
print c
输出:Counter({‘a‘: 5, ‘b‘: 4, ‘c‘: 3, ‘d‘: 2, ‘e‘: 1})

2.2 时间模块和datetime模块

和时间有关系我们就要用到时间模块,首先要做的就是导入时间模块

#常用方法
1.time.sleep(secs)
(线程)推迟指定的时间运行。单位为秒。
2.time.time()
获取当前时间戳

表示时间的三种方式

在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:

(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。

(2)格式化的时间字符串(Format String): ‘1999-12-06’

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身

python中时间日期格式化符号:

(3)元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

索引(Index) 属性(Attribute) 值(Values)
0 tm_year(年) 比如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 60
6 tm_wday(weekday) 0 - 6(0表示周一)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为0

首先,我们先导入time模块,来认识一下python中表示时间的几种格式:

#导入时间模块
>>>import time

#时间戳
>>>time.time()
1500875844.800804

#时间字符串
>>>time.strftime("%Y-%m-%d %X")
‘2017-07-24 13:54:37‘
>>>time.strftime("%Y-%m-%d %H-%M-%S")
‘2017-07-24 13-55-04‘

#时间元组:localtime将一个时间戳转换为当前时区的struct_time
time.localtime()
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24,
          tm_hour=13, tm_min=59, tm_sec=37,
                 tm_wday=0, tm_yday=205, tm_isdst=0)

小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的

几种格式之间的转换

#时间戳-->结构化时间
#time.gmtime(时间戳)    #UTC时间,与英国伦敦当地时间一致
#time.localtime(时间戳) #当地时间。例如我们现在在北京执行这个方法:与UTC时间相差8小时,UTC时间+8小时 = 北京时间
>>>time.gmtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=2, tm_min=40, tm_sec=0,   tm_wday=4, tm_yday=195, tm_isdst=0)
>>>time.localtime(1500000000)
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0,   tm_wday=4, tm_yday=195, tm_isdst=0)

#结构化时间-->时间戳 
#time.mktime(结构化时间)
>>>time_tuple = time.localtime(1500000000)
>>>time.mktime(time_tuple)
1500000000.0
#结构化时间-->字符串时间
#time.strftime("格式定义","结构化时间")  结构化时间参数若不传,则现实当前时间
>>>time.strftime("%Y-%m-%d %X")
‘2017-07-24 14:55:36‘
>>>time.strftime("%Y-%m-%d",time.localtime(1500000000))
‘2017-07-14‘

#字符串时间-->结构化时间
#time.strptime(时间字符串,字符串对应格式)
>>>time.strptime("2017-03-16","%Y-%m-%d")
time.struct_time(tm_year=2017, tm_mon=3, tm_mday=16, tm_hour=0, tm_min=0, tm_sec=0,   tm_wday=3, tm_yday=75, tm_isdst=-1)
>>>time.strptime("07/24/2017","%m/%d/%Y")
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=24, tm_hour=0, tm_min=0, tm_sec=0,   tm_wday=0, tm_yday=205, tm_isdst=-1)

#结构化时间 --> %a %b %d %H:%M:%S %Y串
#time.asctime(结构化时间) 如果不传参数,直接返回当前时间的格式化串
>>>time.asctime(time.localtime(1500000000))
‘Fri Jul 14 10:40:00 2017‘
>>>time.asctime()
‘Mon Jul 24 15:18:33 2017‘

#时间戳 --> %a %d %d %H:%M:%S %Y串
#time.ctime(时间戳)  如果不传参数,直接返回当前时间的格式化串
>>>time.ctime()
‘Mon Jul 24 15:19:07 2017‘
>>>time.ctime(1500000000)
‘Fri Jul 14 10:40:00 2017‘ 

import time
true_time=time.mktime(time.strptime(‘2017-09-11 08:30:00‘,‘%Y-%m-%d %H:%M:%S‘))
time_now=time.mktime(time.strptime(‘2017-09-12 11:00:00‘,‘%Y-%m-%d %H:%M:%S‘))
dif_time=time_now-true_time
struct_time=time.gmtime(dif_time)
print(‘过去了%d年%d月%d天%d小时%d分钟%d秒‘%(struct_time.tm_year-1970,struct_time.tm_mon-1,
                                       struct_time.tm_mday-1,struct_time.tm_hour,
                                       struct_time.tm_min,struct_time.tm_sec))

计算时间差

#时间加减
import datetime

# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
#print(datetime.date.fromtimestamp(time.time()) )  # 时间戳直接转成日期格式 2016-08-19
# print(datetime.datetime.now() )
# print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
# print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分

#
# c_time  = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #时间替换

datetime模块

2.3 random模块

import random

print(random.random())#(0,1)----float    大于0且小于1之间的小数

print(random.randint(1,3))  #[1,3]    大于等于1且小于等于3之间的整数

print(random.randrange(1,3)) #[1,3)    大于等于1且小于3之间的整数

print(random.choice([1,‘23‘,[4,5]]))#1或者23或者[4,5]

print(random.sample([1,‘23‘,[4,5]],2))#列表元素任意2个组合

print(random.uniform(1,3))#大于1小于3的小数,如1.927109612082716 

item=[1,3,5,7,9]
random.shuffle(item) #打乱item的顺序,相当于"洗牌"
print(item)

import random
def make_code(n):
    res=‘‘
    for i in range(n):
        s1=chr(random.randint(65,90))
        s2=chr(random.randint(97,122))
        s3=str(random.randint(0,9))
        res+=random.choice([s1,s2,s3])
    return res

print(make_code(5))

生成随机验证码

2.4 os模块

os模块是与操作系统交互的一个接口

‘‘‘
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
os.curdir  返回当前目录: (‘.‘)
os.pardir  获取当前目录的父目录字符串名:(‘..‘)
os.makedirs(‘dirname1/dirname2‘)    可生成多层递归目录
os.removedirs(‘dirname1‘)    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir(‘dirname‘)    生成单级目录;相当于shell中mkdir dirname
os.rmdir(‘dirname‘)    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir(‘dirname‘)    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  删除一个文件
os.rename("oldname","newname")  重命名文件/目录
os.stat(‘path/filename‘)  获取文件/目录信息
os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
os.name    输出字符串指示当前使用平台。win->‘nt‘; Linux->‘posix‘
os.system("bash command")  运行shell命令,直接显示
os.popen("bash command).read()  运行shell命令,获取执行结果
os.environ  获取系统环境变量

os.path
os.path.abspath(path) 返回path规范化的绝对路径 os.path.split(path) 将path分割成目录和文件名二元组返回 os.path.dirname(path) 返回path的目录。  其实就是os.path.split(path)的第一个元素 os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。
                        即os.path.split(path)的第二个元素
os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  如果path是绝对路径,返回True
os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  返回path所指向的文件或者目录的最后访问时间
os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
os.path.getsize(path) 返回path的大小
‘‘‘

注意:os.stat(‘path/filename‘)  获取文件/目录信息 的结构说明

stat 结构:

st_mode: inode 保护模式
st_ino: inode 节点号。
st_dev: inode 驻留的设备。
st_nlink: inode 的链接数。
st_uid: 所有者的用户ID。
st_gid: 所有者的组ID。
st_size: 普通文件以字节为单位的大小;包含等待某些特殊文件的数据。
st_atime: 上次访问的时间。
st_mtime: 最后一次修改的时间。
st_ctime: 由操作系统报告的"ctime"。在某些系统上(如Unix)是最新的元数据更改的时间,在其它系统上(如Windows)是创建时间(详细信息参见平台的文档)。

stat 结构

2.5 sys模块

sys模块是与python解释器交互的一个接口

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0),错误退出sys.exit(1)
sys.version        获取Python解释程序的版本信息
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

2.6 re模块

讲正题之前我们先来看一个例子:https://reg.jd.com/reg/person?ReturnUrl=https%3A//www.jd.com/

这是京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示。
假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我们格式有误。
这个功能是怎么实现的呢?
假如现在你用python写一段代码,类似:

phone_number = input(‘please input your phone number : ‘)

你怎么判断这个phone_number是合法的呢?

根据手机号码一共11位并且是只以13、14、15、18开头的数字这些特点,我们用python写了如下代码:

while True:
    phone_number = input(‘please input your phone number : ‘)
    if len(phone_number) == 11             and phone_number.isdigit()            and (phone_number.startswith(‘13‘)             or phone_number.startswith(‘14‘)             or phone_number.startswith(‘15‘)             or phone_number.startswith(‘18‘)):
        print(‘是合法的手机号码‘)
    else:
        print(‘不是合法的手机号码‘)

判断手机号码是否合法1

这是你的写法,现在我要展示一下我的写法:

import re
phone_number = input(‘please input your phone number : ‘)
if re.match(‘^(13|14|15|18)[0-9]{9}$‘,phone_number):
        print(‘是合法的手机号码‘)
else:
        print(‘不是合法的手机号码‘)

文艺青年写法

所以无需多言,正则的好处不言而喻。正则确实重要

正则表达式本身也和python没有什么关系,就是匹配字符串内容的一种规则

官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

一说规则我已经知道你很晕了,现在就让我们先来看一些实际的应用。在线测试工具 http://tool.chinaz.com/regex/

字符匹配(普通字符,元字符):

1 普通字符:大多数字符和字母都会和自身匹配
              >>> re.findall(‘alvin‘,‘yuanaleSxalexwupeiqi‘)
                      [‘alvin‘]

2 元字符:. ^ $ * + ? { } [ ] | ( ) \

3常用方式

re.findall  返回所有的匹配项

re.search  只匹配一项符合规则的元素,返回对象,.group查看

re.match  只匹配字符串开始的位置,返回对象,.group查看

2.6.1 元字符

. ^ $

  .匹配除了换行符(\n)外的任意字符

  ^匹配字符串开头

  $匹配字符串结尾

import re
print(re.findall(‘李.‘,‘李爽\nalex\n李四\negon\nalvin\n李二‘))
#运行结果
[‘李爽‘, ‘李四‘, ‘李二‘]

ret=re.search(‘李.‘,‘李爽\nalex\n李四\negon\nalvin\n李二‘)
print(ret,ret.group(),ret.span())
#运行结果
<_sre.SRE_Match object; span=(0, 2), match=‘李爽‘> 李爽 (0, 2)

ret=re.match(‘李.‘,‘李爽\nalex\n李四\negon\nalvin\n李二‘)
print(ret,ret.group(),ret.span())
#运行结果
<_sre.SRE_Match object; span=(0, 2), match=‘李爽‘> 李爽 (0, 2)

print(re.findall(‘^李.‘,‘李爽\nalex\n李四\negon\nalvin\n李二‘))
#运行结果
[‘李爽‘]

print(re.findall(‘李.$‘,‘李爽\nalex\n李四\negon\nalvin\n李二‘))
#运行结果
[‘李二‘]

* + ? { }

  *匹配前一个字符0个或任意多个

  +匹配前一个字符1个或任意多个

  ?匹配前一个字符0个或任意1个

  {}匹配前一个字符定义个数个

import re
print(re.findall(‘李.*‘,‘李杰\nalex\n李莲英\negon\nalvin\n李二棍子‘))
#运行结果
[‘李杰‘, ‘李莲英‘, ‘李二棍子‘]

print(re.findall(‘李.+‘,‘李杰\nalex\n李莲英\negon\nalvin\n李二棍子‘))
#运行结果
[‘李杰‘, ‘李莲英‘, ‘李二棍子‘]

print(re.findall(‘李.{1,2}\n‘,‘李杰\nalex\n李莲英\negon\nalvin\n李二棍子‘))
#运行结果
[‘李杰\n‘, ‘李莲英\n‘]

print(re.findall(‘\d+\.?\d*‘,‘12.45,34,0.05,109‘))  # 匹配一个数字包括整型和浮点型
#运行结果
[‘12.45‘, ‘34‘, ‘0.05‘, ‘109‘]

注意:前面的*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成惰性匹配

print(re.findall(‘131\d+?‘,‘1312312312‘))
#运行结果
[‘1312‘]

转义符\

1、反斜杠后边跟元字符去除特殊功能,比如\.

2、反斜杠后边跟普通字符实现特殊功能,比如\d

\d      匹配任何十进制数;          它相当于类 [0-9]。
\D      匹配任何非数字字符;        它相当于类 [^0-9]。
\s      匹配任何空白字符;          它相当于类 [ \t\n\r\f\v]。
\S      匹配任何非空白字符;        它相当于类 [^ \t\n\r\f\v]。
\w      匹配任何字母数字字符;     它相当于类 [a-zA-Z0-9_]。
\W      匹配任何非字母数字字符;   它相当于类 [^a-zA-Z0-9_]
\b      匹配一个特殊字符边界,比如空格 ,&,#等 
print(re.findall(r‘I\b‘,‘I am LIST‘))
#运行结果
[‘I‘]
#匹配abc\le”中的‘c\l’:
print(re.findall(‘c\\\l‘,‘abc\le‘))
print(re.findall(‘c\\\\l‘,‘abc\le‘))
print(re.findall(r‘c\\l‘,‘abc\le‘))
#运行结果
[‘c\\l‘]

print(re.findall(r‘c\\b‘,r‘abc\be‘))
#运行结果
[‘c\\b‘]

分组()

print(re.findall(r‘(ad)+‘, ‘add,adddd‘))  #只返回元组的内容
#运行结果
[‘ad‘, ‘ad‘]

ret=re.search(‘(?P<id>\d{2})/(?P<name>\w{3})‘,‘23/com‘)  #?P<‘变量名‘>进行命名
print(ret.group(),ret.group(1),ret.group(2))
print(ret.group(‘id‘))
#运行结果
23/com    23    com
23

或|

print(re.findall(‘ab|\d‘,‘rabhdg8sd‘))
#运行结果
[‘ab‘, ‘8‘]

字符集[]

  [ab]匹配字符集中的一个字符

  -  \  ^ 在[]中有特殊意义

print(re.findall(‘a[bc]d‘,‘abd‘))
print(re.findall(‘[abc]‘,‘abc‘))
print(re.findall(‘[.*+]‘,‘a.bc+‘))
#运行结果
[‘abd‘]
[‘a‘, ‘b‘, ‘c‘]
[‘.‘, ‘+‘]

#在字符集里有功能的符号: - ^ \
print(re.findall(‘[1-9]‘,‘45dha3‘))
print(re.findall(‘[^ab]‘,‘45bdha3‘))
print(re.findall(‘[\d]‘,‘45bdha3‘))
#运行结果
[‘4‘, ‘5‘, ‘3‘]
[‘4‘, ‘5‘, ‘d‘, ‘h‘, ‘3‘]
[‘4‘, ‘5‘, ‘3‘]

2.6.2 贪婪匹配

贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

string pattern1 = @"a.*c";   // greedy match
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abcabc"
非贪婪匹配:在满足匹配时,匹配尽可能短的字符串,使用?来表示非贪婪匹配

string pattern1 = @"a.*?c";   // non-greedy match
Regex regex = new Regex(pattern1);
regex.Match("abcabc"); // return "abc"

几个常用的非贪婪匹配Pattern

*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m}? 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复

.*?的用法:

--------------------------------

. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
和在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?a

就是取前面任意长度的字符,到第一个 a 出现

2.6.3 re模块下的常用方法

import re

re.findall(‘a‘,‘alvin yuan‘)    #返回所有满足匹配条件的结果,放在列表里

re.search(‘a‘,‘alvin yuan‘).group()  

      #函数会在字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以
      # 通过调用group()方法得到匹配的字符串,如果字符串没有匹配,则返回None。

re.match(‘a‘,‘abc‘).group()     #同search,不过尽在字符串开始处进行匹配

ret=re.split(‘[ab]‘,‘abcd‘)     #先按‘a‘分割得到‘‘和‘bcd‘,在对‘‘和‘bcd‘分别按‘b‘分割

print(ret)#[‘‘, ‘‘, ‘cd‘]

ret=re.sub(‘\d‘,‘abc‘,‘alvin5yuan6‘,1)

ret=re.subn(‘\d‘,‘abc‘,‘alvin5yuan6‘)

obj=re.compile(‘\d{3}‘)
ret=obj.search(‘abc123eeee‘)
print(ret.group())#123

import re
ret=re.finditer(‘\d‘,‘ds3sy4784a‘)
print(ret)        #<callable_iterator object at 0x10195f940>

print(next(ret).group())
print(next(ret).group())

注意:

findall的优先级查询:取消优先级(?:)

import re

ret=re.findall(‘www.(baidu|oldboy).com‘,‘www.oldboy.com‘)
print(ret)#[‘oldboy‘]     这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可

ret=re.findall(‘www.(?:baidu|oldboy).com‘,‘www.oldboy.com‘)
print(ret)#[‘www.oldboy.com‘]

课后作业

1、 匹配一段文本中的每行的邮箱

print(re.match(‘^[a-zA-Z]((\w*\.[a-zA-Z0-9]*)|[a-zA-Z0-9]*)[a-zA-Z]@([a-z0-9A-Z]+\.){1,2}[a-zA-Z]{2,}$‘,‘[email protected]‘).group()) 

2、 匹配一段文本中的每行的时间字符串,比如:‘1990-07-12’;

print(re.search(‘([12]\d{3})-((0?[1-9])|(1[0-2]))-(30|31|([12][0-9])|(0?[1-9]))‘,‘1990-12-12‘).group())

  分别取出1年的12个月(^(0?[1-9]|1[0-2])$)

print(re.search(‘-((0?[1-9])|(1[0-2]))-‘,‘1990-12-31‘).group(1))

  一个月的31天:^((0?[1-9])|((1|2)[0-9])|30|31)$

print(re.search(‘-(30|31|([12][0-9])|(0?[1-9]))$‘,‘1990-12-31‘).group(1))

3、 匹配一段文本中所有的身份证数字。

print(re.search(‘\d{6}(([12]\d{3})((0[1-9])|(1[0-2]))(30|31|([12][0-9])|(0[1-9])))\d{3}[\dXx]‘,‘qweqw320825195902174316‘).group())

4、 匹配qq号。(腾讯QQ号从10000开始) [1,9][0,9]{4,}

print(re.search(‘[1-9][0-9]{4,}‘,‘27440278‘).group())

5、 匹配一个浮点数。 ^(-?\d+)(\.\d+)?$ 或者 -?\d+\.?\d*

print(re.search(r"-?\d+\.\d*","1-2*(60+(-40.35/5)-(-4*3))").group())

6、 匹配汉字。 ^[\u4e00-\u9fa5]{0,}$

print(re.findall(‘[\u4e00-\u9fa5]+‘,‘你好老男孩‘))

7、 匹配出所有整数

ret=re.findall(r"-?\d+\.\d*|(-?\d+)","1-2*(60+(-40.35/5)-(-4*3))")
ret.remove("")
print(ret)

8、计算器

import re
express = ‘1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )‘
express = ‘‘.join(express.split())   #要用到for循环,所以去除空格,方便取值
def counter(express):  #定义基本的无括号加减乘除函数
    for i in express:
        ‘‘‘
        先计算乘除
        ‘‘‘
        if i == ‘*‘:
            mul = re.search(‘-?\d+\.?\d*\*-?\d+\.?\d*‘,express).group()
            express = express.replace(mul,‘+%s‘%(str(float(mul.split(‘*‘)[0])*float(mul.split(‘*‘)[1]))))
        elif i == ‘/‘:
            div = re.search(‘-?\d+\.?\d*\/-?\d+\.?\d*‘,express).group()
            express = express.replace(div,‘+%s‘%(str(float(div.split(‘/‘)[0])/float(div.split(‘/‘)[1]))))
        if re.search(‘\+\++‘,express):
            express = express.replace(re.search(‘\+\++‘,express).group(),‘+‘)
        if express[0] == ‘+‘:
            express = express.strip(‘+‘)
    while ‘+‘ in express or ‘-‘ in express:
        ‘‘‘
        乘除计算完了计算加减
        ‘‘‘
        add=re.search(‘-?\d+\.?\d*\+-?\d+\.?\d*‘,express)
        if not add:
            if express[0] != ‘-‘:
                express = str(float(re.split(‘-‘,express)[0])-float(re.split(‘-‘,express)[1]))
            elif express.count(‘-‘) == 2:
                express = ‘-%s‘%(str(float(re.findall(‘\d+\.?\d*‘,express)[0])+float(re.findall(‘\d+\.?\d*‘,express)[1])))
            break
        express = express.replace(add.group(), ‘+%s‘ %(str(float(add.group().split(‘+‘)[0])+float(add.group().split(‘+‘)[1]))))
        if express[0] == ‘+‘:express = express.strip(‘+‘)
    return express
while ‘(‘in express:
    ‘‘‘
    findall取出所有的括号,之后for循环替换(内容)为计算值
    ‘‘‘
    res = re.findall(‘\(([^()]+)\)‘, express)
    for i in range(len(res)):
        express = express.replace(‘(%s)‘ % res[i], counter(res[i]))
    if ‘--‘ in express:
        express = express.replace(‘--‘, ‘+‘)
print(counter(express))

9、爬虫练习(豆瓣电影250)

import requests
import re
import json
def getPage(url):
    res=requests.get(url)
    res.encoding=res.apparent_encoding
    return res.text
def match(s):
    mov = re.compile(‘<div class="item">.*?<div class="pic">.*?<em .*?>(?P<id>\d+).*?<span class="title">(?P<title>.*?)</span>‘
                   ‘.*?<p.*?>.*?导演: (?P<br>.*?) .*?</p>.*?<span class="rating_num" .*?>(?P<rating_num>.*?)</span>.*?<span>(?P<comment_num>.*?)评价</span>‘,re.S)
    ret = mov.finditer(s)
    for i in ret:
        yield {
            "id": i.group("id"),
            "title": i.group("title"),
            "br":i.group("br"),
            "rating_num": i.group("rating_num"),
            "comment_num": i.group("comment_num"),
        }
def main(num):
    url=‘https://movie.douban.com/top250?start=%s&filter=‘%num
    ret=match(getPage(url))
    print(ret)
    with open(‘movie‘,‘a‘,encoding=‘utf-8‘) as f:
        for obj in ret:
            print(obj)
            date=json.dumps(obj,ensure_ascii=False)
            f.write(date+‘\n‘)
count=0
for i in range(10):
    main(count)
    count+=25

{"id": "1", "title": "肖申克的救赎", "br": "弗兰克·德拉邦特", "rating_num": "9.6", "comment_num": "837775人"}
{"id": "2", "title": "霸王别姬", "br": "陈凯歌", "rating_num": "9.5", "comment_num": "599361人"}
{"id": "3", "title": "这个杀手不太冷", "br": "吕克·贝松", "rating_num": "9.4", "comment_num": "803727人"}
{"id": "4", "title": "阿甘正传", "br": "Robert", "rating_num": "9.4", "comment_num": "687757人"}
{"id": "5", "title": "美丽人生", "br": "罗伯托·贝尼尼", "rating_num": "9.5", "comment_num": "400137人"}
{"id": "6", "title": "千与千寻", "br": "宫崎骏", "rating_num": "9.2", "comment_num": "639479人"}
{"id": "7", "title": "辛德勒的名单", "br": "史蒂文·斯皮尔伯格", "rating_num": "9.4", "comment_num": "370039人"}
{"id": "8", "title": "泰坦尼克号", "br": "詹姆斯·卡梅隆", "rating_num": "9.2", "comment_num": "632718人"}
{"id": "9", "title": "盗梦空间", "br": "克里斯托弗·诺兰", "rating_num": "9.2", "comment_num": "740357人"}
{"id": "10", "title": "机器人总动员", "br": "安德鲁·斯坦顿", "rating_num": "9.3", "comment_num": "485949人"}
{"id": "11", "title": "海上钢琴师", "br": "朱塞佩·托纳多雷", "rating_num": "9.2", "comment_num": "584287人"}
{"id": "12", "title": "三傻大闹宝莱坞", "br": "拉库马·希拉尼", "rating_num": "9.1", "comment_num": "651683人"}
{"id": "13", "title": "忠犬八公的故事", "br": "莱塞·霍尔斯道姆", "rating_num": "9.2", "comment_num": "437714人"}
{"id": "14", "title": "放牛班的春天", "br": "克里斯托夫·巴拉蒂", "rating_num": "9.2", "comment_num": "437959人"}
{"id": "15", "title": "大话西游之大圣娶亲", "br": "刘镇伟", "rating_num": "9.2", "comment_num": "471781人"}
{"id": "16", "title": "教父", "br": "弗朗西斯·福特·科波拉", "rating_num": "9.2", "comment_num": "333767人"}
{"id": "17", "title": "龙猫", "br": "宫崎骏", "rating_num": "9.1", "comment_num": "405740人"}
{"id": "18", "title": "楚门的世界", "br": "彼得·威尔", "rating_num": "9.0", "comment_num": "436305人"}
{"id": "19", "title": "乱世佳人", "br": "维克多·弗莱明", "rating_num": "9.2", "comment_num": "264111人"}
{"id": "20", "title": "天堂电影院", "br": "朱塞佩·托纳多雷", "rating_num": "9.1", "comment_num": "302107人"}
{"id": "21", "title": "当幸福来敲门", "br": "加布里尔·穆奇诺", "rating_num": "8.9", "comment_num": "524003人"}
{"id": "22", "title": "触不可及", "br": "奥利维·那卡什", "rating_num": "9.1", "comment_num": "355449人"}
{"id": "23", "title": "搏击俱乐部", "br": "大卫·芬奇", "rating_num": "9.0", "comment_num": "395685人"}
{"id": "24", "title": "熔炉", "br": "黄东赫", "rating_num": "9.2", "comment_num": "237679人"}
{"id": "25", "title": "十二怒汉", "br": "Sidney", "rating_num": "9.3", "comment_num": "165400人"}
{"id": "26", "title": "无间道", "br": "刘伟强", "rating_num": "9.0", "comment_num": "384584人"}
{"id": "27", "title": "怦然心动", "br": "罗伯·莱纳", "rating_num": "8.9", "comment_num": "524510人"}
{"id": "28", "title": "指环王3:王者无敌", "br": "彼得·杰克逊", "rating_num": "9.1", "comment_num": "277574人"}
{"id": "29", "title": "天空之城", "br": "宫崎骏", "rating_num": "9.0", "comment_num": "322033人"}
{"id": "30", "title": "少年派的奇幻漂流", "br": "李安", "rating_num": "9.0", "comment_num": "563576人"}
{"id": "31", "title": "罗马假日", "br": "威廉·惠勒", "rating_num": "8.9", "comment_num": "375195人"}
{"id": "32", "title": "星际穿越", "br": "克里斯托弗·诺兰", "rating_num": "9.1", "comment_num": "465087人"}
{"id": "33", "title": "鬼子来了", "br": "姜文", "rating_num": "9.1", "comment_num": "219304人"}
{"id": "34", "title": "大话西游之月光宝盒", "br": "刘镇伟", "rating_num": "8.9", "comment_num": "382638人"}
{"id": "35", "title": "蝙蝠侠:黑暗骑士", "br": "克里斯托弗·诺兰", "rating_num": "9.0", "comment_num": "306181人"}
{"id": "36", "title": "两杆大烟枪", "br": "Guy", "rating_num": "9.0", "comment_num": "266304人"}
{"id": "37", "title": "飞屋环游记", "br": "彼特·道格特", "rating_num": "8.9", "comment_num": "484243人"}
{"id": "38", "title": "活着", "br": "张艺谋", "rating_num": "9.0", "comment_num": "254802人"}
{"id": "39", "title": "飞越疯人院", "br": "米洛斯·福尔曼", "rating_num": "9.0", "comment_num": "269994人"}
{"id": "40", "title": "窃听风暴", "br": "弗洛里安·亨克尔·冯·多纳斯马", "rating_num": "9.1", "comment_num": "213974人"}
{"id": "41", "title": "海豚湾", "br": "Louie", "rating_num": "9.3", "comment_num": "177483人"}
{"id": "42", "title": "闻香识女人", "br": "马丁·布莱斯", "rating_num": "8.9", "comment_num": "310865人"}
{"id": "43", "title": "V字仇杀队", "br": "詹姆斯·麦克特格", "rating_num": "8.8", "comment_num": "398888人"}
{"id": "44", "title": "哈尔的移动城堡", "br": "宫崎骏", "rating_num": "8.8", "comment_num": "334315人"}
{"id": "45", "title": "教父2", "br": "弗朗西斯·福特·科波拉", "rating_num": "9.1", "comment_num": "179892人"}
{"id": "46", "title": "美丽心灵", "br": "朗·霍华德", "rating_num": "8.9", "comment_num": "295049人"}
{"id": "47", "title": "指环王2:双塔奇兵", "br": "彼得·杰克逊", "rating_num": "8.9", "comment_num": "262118人"}
{"id": "48", "title": "指环王1:魔戒再现", "br": "彼得·杰克逊", "rating_num": "8.9", "comment_num": "292523人"}
{"id": "49", "title": "死亡诗社", "br": "彼得·威尔", "rating_num": "8.9", "comment_num": "265853人"}
{"id": "50", "title": "情书", "br": "岩井俊二", "rating_num": "8.8", "comment_num": "360110人"}
{"id": "51", "title": "天使爱美丽", "br": "让-皮埃尔·热内", "rating_num": "8.7", "comment_num": "467063人"}
{"id": "52", "title": "美国往事", "br": "赛尔乔·莱翁内", "rating_num": "9.1", "comment_num": "167902人"}
{"id": "53", "title": "七宗罪", "br": "大卫·芬奇", "rating_num": "8.7", "comment_num": "421273人"}
{"id": "54", "title": "钢琴家", "br": "罗曼·波兰斯基", "rating_num": "9.0", "comment_num": "195745人"}
{"id": "55", "title": "控方证人", "br": "比利·怀尔德", "rating_num": "9.6", "comment_num": "77501人"}
{"id": "56", "title": "狮子王", "br": "Roger", "rating_num": "8.9", "comment_num": "270862人"}
{"id": "57", "title": "辩护人", "br": "杨宇硕", "rating_num": "9.1", "comment_num": "188151人"}
{"id": "58", "title": "被嫌弃的松子的一生", "br": "中岛哲也", "rating_num": "8.9", "comment_num": "266378人"}
{"id": "59", "title": "致命魔术", "br": "克里斯托弗·诺兰", "rating_num": "8.8", "comment_num": "326325人"}
{"id": "60", "title": "饮食男女", "br": "李安", "rating_num": "9.0", "comment_num": "183462人"}
{"id": "61", "title": "勇敢的心", "br": "梅尔·吉布森", "rating_num": "8.8", "comment_num": "287165人"}
{"id": "62", "title": "剪刀手爱德华", "br": "Tim", "rating_num": "8.7", "comment_num": "466557人"}
{"id": "63", "title": "小鞋子", "br": "马基德·马基迪", "rating_num": "9.2", "comment_num": "130129人"}
{"id": "64", "title": "音乐之声", "br": "Robert", "rating_num": "8.9", "comment_num": "223455人"}
{"id": "65", "title": "低俗小说", "br": "昆汀·塔伦蒂诺", "rating_num": "8.7", "comment_num": "319091人"}
{"id": "66", "title": "入殓师", "br": "泷田洋二郎", "rating_num": "8.8", "comment_num": "309010人"}
{"id": "67", "title": "本杰明·巴顿奇事", "br": "大卫·芬奇", "rating_num": "8.7", "comment_num": "377957人"}
{"id": "68", "title": "沉默的羔羊", "br": "乔纳森·戴米", "rating_num": "8.7", "comment_num": "337753人"}
{"id": "69", "title": "黑客帝国", "br": "安迪·沃卓斯基", "rating_num": "8.8", "comment_num": "267384人"}
{"id": "70", "title": "蝴蝶效应", "br": "埃里克·布雷斯", "rating_num": "8.7", "comment_num": "365639人"}
{"id": "71", "title": "拯救大兵瑞恩", "br": "史蒂文·斯皮尔伯格", "rating_num": "8.8", "comment_num": "224698人"}
{"id": "72", "title": "素媛", "br": "李濬益", "rating_num": "9.1", "comment_num": "163415人"}
{"id": "73", "title": "西西里的美丽传说", "br": "朱塞佩·托纳多雷", "rating_num": "8.7", "comment_num": "327862人"}
{"id": "74", "title": "玛丽和马克思", "br": "Adam", "rating_num": "8.9", "comment_num": "226044人"}
{"id": "75", "title": "心灵捕手", "br": "格斯·范·桑特", "rating_num": "8.7", "comment_num": "257306人"}
{"id": "76", "title": "幽灵公主", "br": "宫崎骏&nbsp;&nbsp;&nbsp;主演:", "rating_num": "8.8", "comment_num": "223886人"}
{"id": "77", "title": "第六感", "br": "M·奈特·沙马兰", "rating_num": "8.8", "comment_num": "223059人"}
{"id": "78", "title": "春光乍泄", "br": "王家卫&nbsp;&nbsp;&nbsp;主演:", "rating_num": "8.8", "comment_num": "230889人"}
{"id": "79", "title": "阳光灿烂的日子", "br": "姜文", "rating_num": "8.7", "comment_num": "257745人"}
{"id": "80", "title": "让子弹飞", "br": "姜文", "rating_num": "8.7", "comment_num": "596794人"}
{"id": "81", "title": "大闹天宫", "br": "万籁鸣", "rating_num": "9.2", "comment_num": "91987人"}
{"id": "82", "title": "大鱼", "br": "蒂姆·波顿", "rating_num": "8.7", "comment_num": "240198人"}
{"id": "83", "title": "射雕英雄传之东成西就", "br": "刘镇伟", "rating_num": "8.7", "comment_num": "262305人"}
{"id": "84", "title": "重庆森林", "br": "王家卫", "rating_num": "8.6", "comment_num": "310304人"}
{"id": "85", "title": "疯狂动物城", "br": "拜伦·霍华德", "rating_num": "9.2", "comment_num": "463619人"}
{"id": "86", "title": "阳光姐妹淘", "br": "姜炯哲", "rating_num": "8.8", "comment_num": "255222人"}
{"id": "87", "title": "上帝之城", "br": "Kátia", "rating_num": "8.9", "comment_num": "151859人"}
{"id": "88", "title": "禁闭岛", "br": "Martin", "rating_num": "8.6", "comment_num": "339237人"}
{"id": "89", "title": "甜蜜蜜", "br": "陈可辛", "rating_num": "8.7", "comment_num": "222391人"}
{"id": "90", "title": "致命ID", "br": "James", "rating_num": "8.6", "comment_num": "300625人"}
{"id": "91", "title": "告白", "br": "中岛哲也", "rating_num": "8.7", "comment_num": "323192人"}
{"id": "92", "title": "一一", "br": "杨德昌&nbsp;&nbsp;&nbsp;主演:", "rating_num": "8.9", "comment_num": "146116人"}
{"id": "93", "title": "加勒比海盗", "br": "戈尔·维宾斯基", "rating_num": "8.6", "comment_num": "323966人"}
{"id": "94", "title": "狩猎", "br": "托马斯·温特伯格", "rating_num": "9.0", "comment_num": "115625人"}
{"id": "95", "title": "布达佩斯大饭店", "br": "韦斯·安德森", "rating_num": "8.7", "comment_num": "288180人"}
{"id": "96", "title": "爱在黎明破晓前", "br": "理查德·林克莱特", "rating_num": "8.7", "comment_num": "207307人"}
{"id": "97", "title": "断背山", "br": "李安", "rating_num": "8.6", "comment_num": "302359人"}
{"id": "98", "title": "阿凡达", "br": "詹姆斯·卡梅隆", "rating_num": "8.6", "comment_num": "504938人"}
{"id": "99", "title": "风之谷", "br": "宫崎骏", "rating_num": "8.8", "comment_num": "167043人"}
{"id": "100", "title": "摩登时代", "br": "查理·卓别林", "rating_num": "9.2", "comment_num": "81635人"}
{"id": "101", "title": "末代皇帝", "br": "贝纳尔多·贝托鲁奇", "rating_num": "8.8", "comment_num": "151200人"}
{"id": "102", "title": "猫鼠游戏", "br": "史蒂文·斯皮尔伯格", "rating_num": "8.7", "comment_num": "205946人"}
{"id": "103", "title": "爱在日落黄昏时", "br": "理查德·林克莱特", "rating_num": "8.7", "comment_num": "188432人"}
{"id": "104", "title": "萤火虫之墓", "br": "高畑勋", "rating_num": "8.7", "comment_num": "193924人"}
{"id": "105", "title": "侧耳倾听", "br": "近藤喜文", "rating_num": "8.8", "comment_num": "157872人"}
{"id": "106", "title": "哈利·波特与魔法石", "br": "Chris", "rating_num": "8.6", "comment_num": "233372人"}
{"id": "107", "title": "驯龙高手", "br": "迪恩·德布洛斯", "rating_num": "8.7", "comment_num": "269593人"}
{"id": "108", "title": "超脱", "br": "托尼·凯耶", "rating_num": "8.7", "comment_num": "161906人"}
{"id": "109", "title": "穿条纹睡衣的男孩", "br": "马克·赫门", "rating_num": "8.8", "comment_num": "130129人"}
{"id": "110", "title": "海洋", "br": "雅克·贝汉", "rating_num": "9.0", "comment_num": "95686人"}
{"id": "111", "title": "幸福终点站", "br": "史蒂文·斯皮尔伯格", "rating_num": "8.6", "comment_num": "215378人"}
{"id": "112", "title": "菊次郎的夏天", "br": "北野武", "rating_num": "8.7", "comment_num": "168538人"}
{"id": "113", "title": "消失的爱人", "br": "大卫·芬奇", "rating_num": "8.7", "comment_num": "328208人"}
{"id": "114", "title": "倩女幽魂", "br": "程小东", "rating_num": "8.6", "comment_num": "231585人"}
{"id": "115", "title": "燃情岁月", "br": "爱德华·兹威克", "rating_num": "8.8", "comment_num": "143406人"}
{"id": "116", "title": "神偷奶爸", "br": "皮艾尔·柯芬", "rating_num": "8.5", "comment_num": "349369人"}
{"id": "117", "title": "电锯惊魂", "br": "詹姆斯·温", "rating_num": "8.7", "comment_num": "188398人"}
{"id": "118", "title": "谍影重重3", "br": "保罗·格林格拉斯", "rating_num": "8.7", "comment_num": "171206人"}
{"id": "119", "title": "岁月神偷", "br": "罗启锐", "rating_num": "8.6", "comment_num": "292193人"}
{"id": "120", "title": "七武士", "br": "黑泽明", "rating_num": "9.2", "comment_num": "71739人"}
{"id": "121", "title": "借东西的小人阿莉埃蒂", "br": "米林宏昌", "rating_num": "8.7", "comment_num": "203900人"}
{"id": "122", "title": "真爱至上", "br": "理查德·柯蒂斯", "rating_num": "8.5", "comment_num": "294533人"}
{"id": "123", "title": "恐怖直播", "br": "金秉祐", "rating_num": "8.7", "comment_num": "198644人"}
{"id": "124", "title": "雨人", "br": "巴瑞·莱文森", "rating_num": "8.6", "comment_num": "200224人"}
{"id": "125", "title": "虎口脱险", "br": "杰拉尔·乌里", "rating_num": "8.9", "comment_num": "102085人"}
{"id": "126", "title": "贫民窟的百万富翁", "br": "丹尼·鲍尔", "rating_num": "8.5", "comment_num": "379325人"}
{"id": "127", "title": "东邪西毒", "br": "王家卫", "rating_num": "8.6", "comment_num": "236006人"}
{"id": "128", "title": "记忆碎片", "br": "克里斯托弗·诺兰", "rating_num": "8.5", "comment_num": "261694人"}
{"id": "129", "title": "杀人回忆", "br": "奉俊昊", "rating_num": "8.6", "comment_num": "194228人"}
{"id": "130", "title": "疯狂原始人", "br": "科克·德·米科", "rating_num": "8.7", "comment_num": "351527人"}
{"id": "131", "title": "红辣椒", "br": "今敏", "rating_num": "8.8", "comment_num": "119054人"}
{"id": "132", "title": "怪兽电力公司", "br": "彼特·道格特", "rating_num": "8.6", "comment_num": "223767人"}
{"id": "133", "title": "卢旺达饭店", "br": "特瑞·乔治", "rating_num": "8.8", "comment_num": "111242人"}
{"id": "134", "title": "黑天鹅", "br": "达伦·阿罗诺夫斯基", "rating_num": "8.5", "comment_num": "394251人"}
{"id": "135", "title": "穿越时空的少女", "br": "细田守", "rating_num": "8.6", "comment_num": "175172人"}
{"id": "136", "title": "魂断蓝桥", "br": "Mervyn", "rating_num": "8.8", "comment_num": "123348人"}
{"id": "137", "title": "猜火车", "br": "丹尼·博伊尔", "rating_num": "8.5", "comment_num": "235898人"}
{"id": "138", "title": "恋恋笔记本", "br": "尼克·卡索维茨", "rating_num": "8.5", "comment_num": "263418人"}
{"id": "139", "title": "喜宴", "br": "李安&nbsp;&nbsp;&nbsp;主演:", "rating_num": "8.8", "comment_num": "127835人"}
{"id": "140", "title": "英雄本色", "br": "吴宇森", "rating_num": "8.7", "comment_num": "138378人"}
{"id": "141", "title": "小森林 夏秋篇", "br": "森淳一", "rating_num": "8.9", "comment_num": "114139人"}
{"id": "142", "title": "雨中曲", "br": "Stanley", "rating_num": "8.9", "comment_num": "88306人"}
{"id": "143", "title": "傲慢与偏见", "br": "乔·怀特", "rating_num": "8.4", "comment_num": "282113人"}
{"id": "144", "title": "喜剧之王", "br": "周星驰", "rating_num": "8.4", "comment_num": "284863人"}
{"id": "145", "title": "教父3", "br": "弗朗西斯·福特·科波拉", "rating_num": "8.7", "comment_num": "121026人"}
{"id": "146", "title": "完美的世界", "br": "克林特·伊斯特伍德", "rating_num": "9.0", "comment_num": "73779人"}
{"id": "147", "title": "纵横四海", "br": "吴宇森", "rating_num": "8.7", "comment_num": "132505人"}
{"id": "148", "title": "萤火之森", "br": "大森贵弘", "rating_num": "8.7", "comment_num": "143421人"}
{"id": "149", "title": "玩具总动员3", "br": "李·昂克里奇", "rating_num": "8.7", "comment_num": "182820人"}
{"id": "150", "title": "人工智能", "br": "史蒂文·斯皮尔伯格", "rating_num": "8.6", "comment_num": "179078人"}
{"id": "151", "title": "我是山姆", "br": "杰茜·尼尔森", "rating_num": "8.8", "comment_num": "94919人"}
{"id": "152", "title": "浪潮", "br": "丹尼斯·甘塞尔", "rating_num": "8.7", "comment_num": "122275人"}
{"id": "153", "title": "香水", "br": "汤姆·提克威", "rating_num": "8.4", "comment_num": "259631人"}
{"id": "154", "title": "7号房的礼物", "br": "李焕庆", "rating_num": "8.7", "comment_num": "158138人"}
{"id": "155", "title": "冰川时代", "br": "卡洛斯·沙尔丹哈", "rating_num": "8.4", "comment_num": "253931人"}
{"id": "156", "title": "哈利·波特与死亡圣器(下)", "br": "大卫·叶茨", "rating_num": "8.6", "comment_num": "255787人"}
{"id": "157", "title": "花样年华", "br": "王家卫", "rating_num": "8.5", "comment_num": "228156人"}
{"id": "158", "title": "撞车", "br": "保罗·哈吉斯", "rating_num": "8.6", "comment_num": "165161人"}
{"id": "159", "title": "追随", "br": "克里斯托弗·诺兰", "rating_num": "8.9", "comment_num": "74314人"}
{"id": "160", "title": "朗读者", "br": "史蒂芬·戴德利", "rating_num": "8.5", "comment_num": "265296人"}
{"id": "161", "title": "一次别离", "br": "阿斯哈·法哈蒂", "rating_num": "8.7", "comment_num": "123725人"}
{"id": "162", "title": "罗生门", "br": "黑泽明", "rating_num": "8.7", "comment_num": "114306人"}
{"id": "163", "title": "荒蛮故事", "br": "达米安·斯兹弗隆", "rating_num": "8.7", "comment_num": "117082人"}
{"id": "164", "title": "碧海蓝天", "br": "Luc", "rating_num": "8.7", "comment_num": "103849人"}
{"id": "165", "title": "梦之安魂曲", "br": "达伦·阿伦诺夫斯基", "rating_num": "8.7", "comment_num": "104265人"}
{"id": "166", "title": "秒速5厘米", "br": "新海诚", "rating_num": "8.4", "comment_num": "272619人"}
{"id": "167", "title": "战争之王", "br": "安德鲁·尼科尔", "rating_num": "8.5", "comment_num": "164247人"}
{"id": "168", "title": "可可西里", "br": "陆川", "rating_num": "8.6", "comment_num": "120482人"}
{"id": "169", "title": "心迷宫", "br": "忻钰坤", "rating_num": "8.6", "comment_num": "141709人"}
{"id": "170", "title": "时空恋旅人", "br": "理查德·柯蒂斯", "rating_num": "8.6", "comment_num": "179757人"}
{"id": "171", "title": "唐伯虎点秋香", "br": "李力持", "rating_num": "8.3", "comment_num": "293501人"}
{"id": "172", "title": "超能陆战队", "br": "唐·霍尔", "rating_num": "8.6", "comment_num": "339613人"}
{"id": "173", "title": "地球上的星星", "br": "阿米尔·汗", "rating_num": "8.8", "comment_num": "76974人"}
{"id": "174", "title": "蝙蝠侠:黑暗骑士崛起", "br": "克里斯托弗·诺兰", "rating_num": "8.5", "comment_num": "274490人"}
{"id": "175", "title": "海盗电台", "br": "理查德·柯蒂斯", "rating_num": "8.6", "comment_num": "158411人"}
{"id": "176", "title": "小森林 冬春篇", "br": "森淳一", "rating_num": "8.9", "comment_num": "98356人"}
{"id": "177", "title": "谍影重重2", "br": "保罗·格林格拉斯", "rating_num": "8.5", "comment_num": "148743人"}
{"id": "178", "title": "谍影重重", "br": "道格·里曼", "rating_num": "8.5", "comment_num": "179669人"}
{"id": "179", "title": "阿飞正传", "br": "王家卫", "rating_num": "8.5", "comment_num": "165426人"}
{"id": "180", "title": "恐怖游轮", "br": "克里斯托弗·史密斯", "rating_num": "8.3", "comment_num": "290979人"}
{"id": "181", "title": "达拉斯买家俱乐部", "br": "让-马克·瓦雷", "rating_num": "8.6", "comment_num": "155000人"}
{"id": "182", "title": "迁徙的鸟", "br": "雅克·贝汉", "rating_num": "9.1", "comment_num": "49568人"}
{"id": "183", "title": "惊魂记", "br": "Alfred", "rating_num": "8.8", "comment_num": "75511人"}
{"id": "184", "title": "爆裂鼓手", "br": "达米安·沙泽勒", "rating_num": "8.6", "comment_num": "216385人"}
{"id": "185", "title": "荒野生存", "br": "西恩·潘", "rating_num": "8.6", "comment_num": "119464人"}
{"id": "186", "title": "勇闯夺命岛", "br": "迈克尔·贝", "rating_num": "8.5", "comment_num": "133448人"}
{"id": "187", "title": "绿里奇迹", "br": "Frank", "rating_num": "8.7", "comment_num": "99055人"}
{"id": "188", "title": "未麻的部屋", "br": "今敏", "rating_num": "8.8", "comment_num": "83895人"}
{"id": "189", "title": "魔女宅急便", "br": "宫崎骏", "rating_num": "8.4", "comment_num": "178673人"}
{"id": "190", "title": "再次出发之纽约遇见你", "br": "约翰·卡尼", "rating_num": "8.5", "comment_num": "151476人"}
{"id": "191", "title": "东京物语", "br": "小津安二郎", "rating_num": "9.2", "comment_num": "46291人"}
{"id": "192", "title": "牯岭街少年杀人事件", "br": "杨德昌", "rating_num": "8.7", "comment_num": "95916人"}
{"id": "193", "title": "卡萨布兰卡", "br": "Michael", "rating_num": "8.6", "comment_num": "116437人"}
{"id": "194", "title": "燕尾蝶", "br": "岩井俊二", "rating_num": "8.6", "comment_num": "103111人"}
{"id": "195", "title": "末路狂花", "br": "雷德利·斯科特", "rating_num": "8.7", "comment_num": "96500人"}
{"id": "196", "title": "被解救的姜戈", "br": "昆汀·塔伦蒂诺", "rating_num": "8.5", "comment_num": "242646人"}
{"id": "197", "title": "这个男人来自地球", "br": "理查德·沙因克曼", "rating_num": "8.5", "comment_num": "163427人"}
{"id": "198", "title": "变脸", "br": "吴宇森", "rating_num": "8.4", "comment_num": "200936人"}
{"id": "199", "title": "终结者2:审判日", "br": "詹姆斯·卡梅隆", "rating_num": "8.5", "comment_num": "131460人"}
{"id": "200", "title": "英国病人", "br": "安东尼·明格拉", "rating_num": "8.4", "comment_num": "165176人"}
{"id": "201", "title": "忠犬八公物语", "br": "Seijir?", "rating_num": "9.0", "comment_num": "51025人"}
{"id": "202", "title": "E.T. 外星人", "br": "Steven", "rating_num": "8.5", "comment_num": "142065人"}
{"id": "203", "title": "哪吒闹海", "br": "严定宪", "rating_num": "8.8", "comment_num": "72970人"}
{"id": "204", "title": "叫我第一名", "br": "彼得·维纳", "rating_num": "8.6", "comment_num": "101922人"}
{"id": "205", "title": "青蛇", "br": "徐克", "rating_num": "8.4", "comment_num": "201830人"}
{"id": "206", "title": "源代码", "br": "邓肯·琼斯", "rating_num": "8.3", "comment_num": "381931人"}
{"id": "207", "title": "发条橙", "br": "Stanley", "rating_num": "8.4", "comment_num": "174207人"}
{"id": "208", "title": "黄金三镖客", "br": "Sergio", "rating_num": "9.1", "comment_num": "47008人"}
{"id": "209", "title": "黑客帝国3:矩阵革命", "br": "Andy", "rating_num": "8.5", "comment_num": "143005人"}
{"id": "210", "title": "新龙门客栈", "br": "李惠民", "rating_num": "8.4", "comment_num": "168727人"}
{"id": "211", "title": "穆赫兰道", "br": "大卫·林奇", "rating_num": "8.3", "comment_num": "217715人"}
{"id": "212", "title": "美国丽人", "br": "萨姆·门德斯", "rating_num": "8.4", "comment_num": "171848人"}
{"id": "213", "title": "非常嫌疑犯", "br": "布莱恩·辛格", "rating_num": "8.6", "comment_num": "107457人"}
{"id": "214", "title": "城市之光", "br": "Charles", "rating_num": "9.2", "comment_num": "39089人"}
{"id": "215", "title": "上帝也疯狂", "br": "Jamie", "rating_num": "8.6", "comment_num": "89933人"}
{"id": "216", "title": "无耻混蛋", "br": "Quentin", "rating_num": "8.4", "comment_num": "208017人"}
{"id": "217", "title": "初恋这件小事", "br": "Puttipong", "rating_num": "8.3", "comment_num": "424964人"}
{"id": "218", "title": "勇士", "br": "加文·欧康诺", "rating_num": "8.9", "comment_num": "81567人"}
{"id": "219", "title": "爱·回家", "br": "李廷香", "rating_num": "9.0", "comment_num": "44141人"}
{"id": "220", "title": "蓝色大门", "br": "易智言", "rating_num": "8.2", "comment_num": "258848人"}
{"id": "221", "title": "曾经", "br": "约翰·卡尼", "rating_num": "8.3", "comment_num": "192366人"}
{"id": "222", "title": "无敌破坏王", "br": "瑞奇·莫尔", "rating_num": "8.6", "comment_num": "172585人"}
{"id": "223", "title": "模仿游戏", "br": "莫腾·泰杜姆", "rating_num": "8.5", "comment_num": "231681人"}
{"id": "224", "title": "大卫·戈尔的一生", "br": "Alan", "rating_num": "8.7", "comment_num": "80654人"}
{"id": "225", "title": "暖暖内含光", "br": "米歇尔·冈瑞", "rating_num": "8.4", "comment_num": "134860人"}
{"id": "226", "title": "麦兜故事", "br": "袁建滔", "rating_num": "8.5", "comment_num": "119589人"}
{"id": "227", "title": "血钻", "br": "Edward", "rating_num": "8.5", "comment_num": "118951人"}
{"id": "228", "title": "蝴蝶", "br": "菲利普·穆伊尔", "rating_num": "8.6", "comment_num": "90872人"}
{"id": "229", "title": "国王的演讲", "br": "汤姆·霍珀", "rating_num": "8.3", "comment_num": "314306人"}
{"id": "230", "title": "遗愿清单", "br": "罗伯·莱纳", "rating_num": "8.5", "comment_num": "115593人"}
{"id": "231", "title": "巴黎淘气帮", "br": "Laurent", "rating_num": "8.6", "comment_num": "99818人"}
{"id": "232", "title": "与狼共舞", "br": "Kevin", "rating_num": "8.9", "comment_num": "53057人"}
{"id": "233", "title": "荒岛余生", "br": "罗伯特·泽米吉斯", "rating_num": "8.4", "comment_num": "122079人"}
{"id": "234", "title": "爱在午夜降临前", "br": "理查德·林克莱特", "rating_num": "8.7", "comment_num": "104307人"}
{"id": "235", "title": "偷拐抢骗", "br": "盖·里奇", "rating_num": "8.5", "comment_num": "108445人"}
{"id": "236", "title": "枪火", "br": "杜琪峰", "rating_num": "8.6", "comment_num": "90191人"}
{"id": "237", "title": "疯狂的石头", "br": "宁浩", "rating_num": "8.2", "comment_num": "284653人"}
{"id": "238", "title": "千钧一发", "br": "安德鲁·尼科尔", "rating_num": "8.7", "comment_num": "76128人"}
{"id": "239", "title": "夜访吸血鬼", "br": "尼尔·乔丹", "rating_num": "8.3", "comment_num": "185644人"}
{"id": "240", "title": "月球", "br": "邓肯·琼斯", "rating_num": "8.5", "comment_num": "132271人"}
{"id": "241", "title": "中央车站", "br": "Walter", "rating_num": "8.7", "comment_num": "72183人"}
{"id": "242", "title": "爱在暹罗", "br": "楚克?萨克瑞科", "rating_num": "8.3", "comment_num": "209099人"}
{"id": "243", "title": "我爱你", "br": "秋昌民", "rating_num": "9.0", "comment_num": "50563人"}
{"id": "244", "title": "寿司之神", "br": "大卫·贾柏", "rating_num": "8.8", "comment_num": "75169人"}
{"id": "245", "title": "廊桥遗梦", "br": "克林特·伊斯特伍德", "rating_num": "8.5", "comment_num": "90570人"}
{"id": "246", "title": "罪恶之城", "br": "弗兰克·米勒", "rating_num": "8.4", "comment_num": "132529人"}
{"id": "247", "title": "两小无猜", "br": "杨·塞谬尔", "rating_num": "8.1", "comment_num": "302541人"}
{"id": "248", "title": "彗星来的那一夜", "br": "詹姆斯·沃德·布柯特", "rating_num": "8.3", "comment_num": "149944人"}
{"id": "249", "title": "黑鹰坠落", "br": "雷德利·斯科特", "rating_num": "8.5", "comment_num": "101386人"}
{"id": "250", "title": "假如爱有天意", "br": "郭在容", "rating_num": "8.2", "comment_num": "216585人"}

movie

原文地址:https://www.cnblogs.com/xiao-xiong/p/8995188.html

时间: 2024-10-09 06:54:44

常用模块一的相关文章

sublime text3安装 mac os汉化/常用模块

sublime text介绍: Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim. Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写检查,书签,完整

python基础--常用模块与面向对象基础

1常用模块 1.1 xml xml是实现不同语言或程序之间进行数据交换的协议 xml的格式如下: <?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdp

常用模块

1.import讲解#本质就是.py 文件,用来从逻辑上组织pyhton代码(变量.函数.类.逻辑,实现一个功能) 1.1.导入方法导入多个模块,以逗号隔开 例如 module模块: name = "kangkang" def fun(num): print("num",num) 1) import module print(module.name) #调用模块下的参数 module.fun(23) #调用模块下的方法 结果为: kangkang num 23 2)

Python基础(正则、序列化、常用模块和面向对象)-day06

写在前面 上课第六天,打卡: 天地不仁,以万物为刍狗: 一.正则 - - 在线正则工具:http://tool.oschina.net/regex/ - 二.序列化 - json - pickle 三.常用模块介绍 - time - random - os - sys - shutil - shelve - xml - configparser - hashlib - subprocess - logging - re - ... 四.面向对象 - 五.day06课后作业 题目要求: - 模拟实

python——常用模块

time.asctime(time.localtime(1234324422)) python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型.

python常用模块(1):collections模块和re模块(正则表达式详解)

从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来说我们应该先解释模块概念性东西再来学习具体的模块使用.可是直接解释可能反而不好理解,模块的使用非常方便,所以我们采用先介绍使用常用模块过两天再具体进行模块概念的讲解. 预习: 实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998

Python学习笔记-常用模块

1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作为输入执行.这就是传说中的 脚本.随着你的程序变得越来越长,你可能想要将它分割成几个更易于维护的文件.你也可能想在不同的程序中使用顺手的函数,而不是把代码在它们之间中拷来拷去. 为了满足这些需要,Python 提供了一个方法可以从文件中获取定义,在脚本或者解释器的一个交互式实例中使用.这样的文件被称

python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: 1 >>> g = (x * x for xin range(10)) 2 >>> g3 <generator object <genexpr> at 0x1022ef630> 此处g就是一个生成器. 迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是gene

进击的Python【第五章】:Python的高级应用(二)常用模块

Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigParser模块 shelve模块 xml处理 re正则表达式 一.Python模块的定义 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的.那么在Python中,如

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=