一、什么是模块
什么是模块?
常见的场景:一个模块就是一个包含了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": "宫崎骏 主演:", "rating_num": "8.8", "comment_num": "223886人"} {"id": "77", "title": "第六感", "br": "M·奈特·沙马兰", "rating_num": "8.8", "comment_num": "223059人"} {"id": "78", "title": "春光乍泄", "br": "王家卫 主演:", "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": "杨德昌 主演:", "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": "李安 主演:", "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