一、I/O编程
1、文件读写
(1)打开文件
open(name[.mode[.buffering]])
f = open(r"c:\Python\py17\text.txt")
open函数使用一个文件名作为唯一的强制函数,然后返回一个文件对象,模式(mode)和缓冲区(buffering)参数都是可选的,默认是读模式,默认缓冲区是无
(2)文件模式
一般处理一些其他类型的文件,像MP3和图像,那么应该在模式参数中加“b”
(3)文件缓冲区
参数=0,I/O操作无缓冲,将数据直接写到硬盘上
参数=1,I/O操作有缓冲,数据先写到内存里,只有使用flush函数或者close函数才会将数据更新到硬盘
参数>1,使用默认缓冲区大小
(4)文件读取
with open(r"c:\Python\py17\text.txt","r") as fp:
for line in fp.readlines():
print line.strip()
(5)文件写入
with open(r"c:\Python\py17\text.txt","w") as fp:
fp.write("qiye")
二、序列化操作
1、定义
d = dict(url="index.html",title="首页",content="首页")
在程序运行的过程中爬取的页面的链接会不断变化,但是程序一结束或意外中断,程序的内存变量都会被操作系统进行回收,所以把内存中的变量变成可存储或可传输的过程,就是序列化
2、有两个模块:cPickle和pickle来实现序列化
try:
import cPickle as pickle
except ImportError:
import pickle
python实现序列化使用的是dumps和dump方法,dumps方法可以将任意对象序列化成一个str,然后将这个str写入文件进行保存,如果使用dump方法,可以将序列化后的对象直接写入文件中
pickle实现反序列化使用的是load和loads方法,把序列化后的文件从磁盘上读取为一个str,然后使用loads方法将这个str反序列化为对象,或者直接使用load方法将文件直接反序列化为对象
三、进程和线程
1、多进程
实现的两种方式,一种是使用os模块中的fork方法,另一种是使用multiprocessing模块,前者只适用于Unix/Linux系统,后者可跨平台使用
(1)使用os模块中的fork方式实现多线程
这个方法比较特殊,普通的方法都是只调用一次,返回一次,它是调用一次,返回两次
(2)使用multiprocessin模块创建多进程
提供一个Process类 来描述一个进程对象
import os
from multiprocessing import Process
def run_func(name):
print("AAAAAAAAAAAAAAAAAAA(%s)" % name, os.getpid())
if __name__ == '__main__':
print("VBBBBBBB(%s)" % os.getpid())
for i in range(5):
p = Process(target=run_func, args=(str(i)))
print("aaaaaaa")
p.start()
p.join()
print("qqqqqqqqqqqqq")