Python

Python 知识量:10 - 41 - 150

8.4 二进制文件和网页><

处理二进制文件- 8.4.1 -

读取二进制文件应使用b(rb)模式打开文件,可以访问文件的每个字节。例如检查一个文件是否是JPG图片文件:

# rw.py
def check_jpg(fname):
    f=open(fname,'rb')
    head4=tuple(f.read(4))
    return head4==(0xff,0xd8,0xff,0xe0)

运行结果为:

>>> 
======================= RESTART: D:\PythonTestFile\rw.py =======================
>>> check_jpg('sea.jpg')
True

JPG(JPEG)文件有固定的文件头,其前4个字节为(0xff,0xd8,0xff,0xe0),只需要检查是否满足该条件即可。

pickle模块- 8.4.2 -

Python语言拥有许多的专用模块,可以方便的处理各类数据和任务。pickle模块可用来读写几乎任何数结构,还可以用于存储函数。使用时,通过函数pickle.dump()将数据结构存储到二进制文件中,之后再通过函数pickle.load()从文件中读取:

# rw.py
import pickle
def pf_set():
    box={'name':'toy',
         'id':23424,
         'size':[3,4,6],
         'position':[23,834,376,241]}
    f=open('box.dat','wb')
    pickle.dump(box,f)
def pf_get():
    f=open('box.dat','rb')
    newbox=pickle.load(f)
    return newbox

运行结果为:

>>> 
======================= RESTART: D:\PythonTestFile\rw.py =======================
>>> pf_set()
>>> pf_get()
{'name': 'toy', 'id': 23424, 'size': [3, 4, 6], 'position': [23, 834, 376, 241]}

pickle模块执行的操作称为对象串行化,表现为将复杂的数据结构转换为字节流,即数据结构的串行化表示。

注意:pickle不能用于JPG等特殊格式的二进制文件,这类文件必须逐字节进行处理。

处理网页- 8.4.3 -

Python是一种强大的互联网编程语言,它为访问网络提供了强大的支持。可以使用urllib模块读取网页内容。例如读取百度首页的内容:

>>> import urllib.request
>>> res=urllib.request.urlopen('https://www.baidu.com')
>>> html=res.read()
>>> html[:1000]
b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace
("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript> 
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript> 
\r\n</body>\r\n</html>'

通过urllib读取的内容与通过浏览器查看源代码看到的内容是一样的。将网页作为字符串读入变量后,就可以使用字符串函数提取和处理各种信息。可以通过html.parser模块实现基本的网页分析任务。