美文网首页
第五章技术总结

第五章技术总结

作者: 大端DD | 来源:发表于2019-11-17 22:39 被阅读0次

    5.1  储存


    1  文件

    如果Python程序运行结束,那么分配给这 个程序的内存空间也会清空。为了长期持续地存储,Python必须把数据存储在磁盘中。如果把数据储存在磁盘中,即使断电或程序结束,数据依然存在。

    在Python中,我们可以通过内置函数open来创建文件对象。在调用open时,需 要说明文件名,以及打开文件的方式:

    文件名是文件存在于磁盘的名字,打开文件的常用方式有:

    "r" # 读取已经存在的文件

     "w" # 新建文件,并写入

     "a" # 如果文件存在,那么写入到文件的结尾。如果文件不存在,则新建文件并写入

    content = f.read(10) # 读取10个字节的数据 content = f.readline() # 读取一行 content = f.readlines() # 读取所有行,储存在列表中,每个元素是一行。

    如果想写入一行,则需要在字符串末尾加上换行符。在UNIX系统中,换行符 为"\n"。在Windows系统中,换行符为"\r\n"。


    2 上下文管理器

    上下文管理器可以在不需要文件的时候,自动关闭文件。

    常规操作

    下面是用上下文管理器,能清楚的看到文件已关闭,写入失败。

    下面是用上下文管理器,能清楚的看到文件已关闭,写入失败。然后打开文件后,写入成功。

    对于复杂的程序来说,缩进的存在能让程序员更清楚地意识到文件在哪些阶段打开,减少忘记关闭文件的可能性。

    任何定义了__enter__()方法和__exit__()方法的对象都可以用于上下文管理 器。下面,我们自定义一个类Vow,并定义它的__enter__()方法和__exit__()方 法。因此,由Vow类的对象可以用于上下文管理器:


    3 pickle 包

    pickle是腌菜的意思。Python中的pickle也 有类似的意思。通过pickle包,我们可以把某个对象保存下来,再存成磁盘里的文 件。

    实际上,对象的存储分为两步。第一步,我们将对象在内存中的数据直接抓取 出来,转换成一个有序的文本,即所谓的序列化。第二步,将 文本存入文件。等到需要时,我们从文件中读出文本,再放入内存,就可以获得原 有的对象。下面是一个具体的例子,首先是第一步序列化,将内存中的对象转换为 文本流:

    使用pickle包的dumps()方法可以将对象转换成字符串的形式。随后我们用字 节文本的存储方法,将该字符串储存在文件。继续第二步:

    我们可以使用 dump()的方法,一次完成两步:


    5.2  一寸光阴


    1  time包

    标准库的time包提供了基本的时间 功能。下面使用time包:

    方法sleep()可以让程序休眠。根据sleep()接收到的参数,程序会在某时间间 隔之后醒来继续运行:

    time包还定义了struct_time对象。该对象将挂钟时间转换为年、月、日、 时、分、秒等,存储在该对象的各个属性中,比如tm_year、tm_mon、tm_mday…… 下面几种方法可以将挂钟时间转换为struct_time对象:

    我们也可以反过来,把一个struct_time对象转换为time对象:


    2 detetime包

    datetime包是基于time包的一个高级包,datetime可以理 解为由date和time两个部分组成。datetime模块下有两个类:datetime.date类和datetime.time类。

    在给datetime.timedelta传递参数时,除了上面的秒(seconds)和星期 (weeks)外,还可以是天(days)、小时(hours)、毫秒(milliseconds)、 微秒(microseconds)。

    3 日期格式

    包含有时间信息的字符串是"output-1997-12-23-030000.txt",是一个文件 名。字符串format定义了一个格式。这个格式中包含了几个由%引领的特殊字符, 用来代表不同时间信息。

    %Y表示年份、

    %m表示月、

    %d表示日、

    %H表示24小时制的小 时、

    %M表示分、

    %S表示秒。

    通过strptime方法,Python会把需要解析的字符串往 格式上凑。比如说,在格式中%Y的位置,正好看到"1997",就认为1997是 datetime对象t的年。以此类推,就从字符串中获得了t对象的时间信息。

    分别代表不同的时间信息。常用的特殊符号还有:


    5.3 看起来像那样的东西


    1 正式表达

    正则表达式(Regular Expression)的主要功能是从字符串(string)中通 过特定的模式,搜索希望找到的内容。

    Python中可以使用包re来处理正则表达式,目的是找到字符串中的数字:

    除了search()方法外,re包还提供了其他搜索方法,它们的功能有所差别:

    我们可以从这两个函数中选择一个进行搜索。上面的例子中,如果使用 re.match()的话,则会得到None,因为字符串的起始为"a",不符合"[0-9]"的要 求。再一次,我们可以使用m.group()来查看找到的字符串。我们还可以在搜索之后将搜索到的子字符串进行替换。下面的sub()利用正则 pattern在字符串string中进行搜索。对于搜索到的字符串,用另一个字符串 replacement进行替换。函数将返回替换后的字符串:

    此外,常用的方法还有:


    2 写一个正则的表达

    看正则表达式的常用语法。正则表达式用某些符号代表单个字符:

    正则表达式还可以用某些符号来表示某种形式的重复,这些符号紧跟在单个字 符之后,就表示多个这样类似的字符:

    下面是重复符号的例子:

           正则表达                                相符的字符串举例                                    不相符字符串举例

            [0-9]{3,5}                                 "9678"                                                          "12",1234567"          a?b                                         "b","ab"                                                                       "cb"         a+b                                           "aaaaab"                                                                    "b"

    最后,还有位置相关的符号:

    例子:

    正则表达                     相符的字符串举例                  不相符的字符串

     ^ab.*c$                             abeec                                       cabeec

    3   进一步提取

    我们从下面一 个字符串中提取信息:

    content = "abcd_output_1994_abcd_1912_abcd"

    如果我们把正则表达式写成:

    "output_\d{4}"

    那么用search()方法可以找到"output_1994"。但如果我们想进一步提取出 1994本身,则可以在正则表达式上给目标加上括号:

    output_(\d{4})

    括号()包围了一个小的正则表达式\d{4}。这个小的正则表达式能从结果中进 一步筛选信息,即四位的阿拉伯数字。用括号()圈起来的正则表达式的一部分,称 为群(group)。一个正则表达式中可以有多个群。

    我们还可以将群命名,以便更好地使用group查询:


    5.4  Python 有网瘾


    1 HTTP 通讯简介

    通信是一件奇妙的事情。它让信息在不同的个体间传递。动物们散发着化学元 素,传递着求偶信息。人则说着甜言蜜语,向情人表达爱意。猎人们吹着口哨,悄 悄地围拢猎物。服务生则大声地向后厨吆喝,要加两套炸鸡和啤酒。红绿灯指挥着 交通,电视上播放着广告,法老的金字塔刻着禁止进入的诅咒。有了通信,每个人 都和周围的世界连接。在通信这个神秘的过程中,参与通信的个体总要遵守特定的 协议(Protocol)。在日常交谈中,我们无形中使用约定俗成的语法。如果两个人 使用不同的语法,那么就是以不同的协议来交流,最终会不知所云。

    计算机之间的通信就是在不同的计算机间传递信息。所以,计算机通信也要遵 循通信协议。为了多层次地实现全球互联网通信,计算机通信也有一套多层次的协 议体系。HTTP协议是最常见的一种网络协议。它的全名是the Hypertext Transfer Protocol,即超文本传输协议。HTTP协议能实现文件,特别是超文本文 件的传输。在互联网时代,它是应用最广的互联网协议之一。事实上,当我们访问 一个网址时,通常会在浏览器中输入http打头的网址,如 http://www.example.com。这里的http字样,说的就是要用HTTP协议访问相应网 站。

    HTTP的工作方式类似于快餐点单:

    1)请求(request):顾客向服务员提出请求“来个鸡腿汉堡”。

    2)回复(response):服务员根据情况,回应顾客的请求。

    根据情况不同,服务员的回应可能有很多种,比如:

    服务员准备鸡腿汉堡,将鸡腿汉堡交给顾客。(一切OK) 服务员发现自己工作在甜品站。他让顾客前往正式柜台点单。(重新定向) 服务员告诉顾客鸡腿汉堡没有了。(无法找到)

    交易结束后,服务员就将刚才的交易抛到脑后,准备服务下一位顾客。


    计算机发出请求会遵照下面的格式:

    GET/index.html HTTP/1.1  

    host:www.example.com

    在起始行中,有三段信息:

    GET方法。用于说明想要服务器执行的操作。

     /index.html 资源的路径。这里指向服务器上的index.html文件。 

    HTTP/1.1协议的版本。HTTP第一个广泛使用的版本是1.0,当前版本为1.1。

    服务器在接到请求之后,会根据程序,生成对应于该请求的回复,比如:

    HTTP/1.1 200 ok

    Content-type:text/plain

    Content-length:12

    Hello World!

    回复的起始行包含三段信息:

    HTTP/1.1:协议版本 

    200:状态码(status code) 

    OK:状态描述

    其他常见的状态码:

    302:重新定向(Redirect):我这里没有你想要的资源,但我知道另一个地 方xxx有,你可以去那里找。

     404:无法找到(Not Found):我找不到你想要的资源,无能为力

    常见资源:

    text/plain:普通文本

     text/html:HTML文本

     image/jpeg:jpeg图片

     image/gif:gif图片

    2 http.client包


    5.5 写一个爬虫

    最后这个我也不知道问题出哪了。。。

    相关文章

      网友评论

          本文标题:第五章技术总结

          本文链接:https://www.haomeiwen.com/subject/kogsictx.html