一.文件
1.打开文件
open函数用来打开文件,语法格式:
open(name[,mode[,buffering]])
name:文件名,唯一的强制参数
mode:模式,可选
buffering:缓冲,可选
例; f = open(r'c:\text\somefile.txt')
如果文件不存在,则发生IOERROR异常。
- 文件模式(mode)
open函数中的模式参数:
‘r’ : 读模式
'w' :写模式
'a' :追加模式
'b' :二进制模式(可添加到其他模式中使用)改变处理文件方法。
'+' :读/写模式(可添加到其他模式中使用) 例: 'r+'能在打开一个文件时用来读写使用
- 缓冲(buffering)
0/False : 无缓冲(所有读写操作直接针对硬盘)
1/True: 有缓冲(内存代替硬盘,只有使用flush或者close时才会更新硬盘数据)
大于1: 代表缓冲区大小(单位字节)
-1(或任何负数): 代表使用默认缓冲区大小
2.基本文件方法
1.读和写
写入:
f=open('D:\somefile.txt','w')
f.write('hello, ')
f.write('world')
f.close()
读取:
读写行
file.readline()读取单独一行
file.readline(字节)读取字符的最大值
readines读取一个文件的所有行并将其作为列表返回
writelines与readlines相反。注意:writelines不会自动增加新行,需要自己添加。没有writeline方法。
''\r'和“\r\n”
2.管式输出
管道符号(|)将一个命令的标准输出和下一个命令的标准输入连载一起。
cat somefile.txt | python somescript.py
3.对文件内容进行迭代
- 按字节处理
while循环+read方法:
#用read方法对每个字符进行循环
f=open(r'D:\somefile.txt')
while True:
char=f.read(1)
if not char:break
print(char)
f.close()
- 按行操作(read替换为readline)
- 读取所有内容(read不加参数)
- 使用fileinput实现懒惰行迭代
在需要读取一个非常大的文件进行迭代行的操作时,readlines会占用太多内存。可以使用while+readline代替。
用fileinput模块实现懒惰行迭代,fileinput模块包含了打开文件的函数;
import fileinput
for line infileinput.input('D:/somefile.txt'):
print(line)
4.文件迭代器
文件对象是可迭代的。
for line inopen(filename):
print(line)
sys.stdin是可迭代的。
二、数据库支持
1、python数据库API
提供简单、标准化的数据库接口,所以数据库的包装模块应当遵循。
- 全局变量
- apilevel----------------- Python API版本
- threadsafety----------模块的线程安全等级
- paramstyle------------在SQL查询中使用的参数风格
- 异常
- 连接和游标
- 连接对象代表的是和SQL数据库的通信连接。
- 用于执行查询和检查结果。结果可以一个一个获得或者多个一起获得
- 类型和特殊值
- 构造函数处理日期、时间对象、二进制数据对象
- 特殊值表示关系型数据库的类型,比如STRING、NUMBER、DATATIME
2、SQLite和PySQLite
SQLite小型的嵌入式SQL数据库,它的Python包装叫做PYSQLite。速度快、易于使用,不需要建立单独服务器。
3、入门操作
import sqlite3
conn=sqlite3.connect('数据库文件名.db')#相对路径或绝对路径
curs=conn.cursor()#获取连接的游标
conn.commit()#提交
conn.close()
1、网络模块
- socket模块
- 服务器
import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
s.listen(5) #允许的排队等待连接数目
while True:
c, addr = s.accept()
print ('Got connection from', addr)
c.send('Thank you for connecting') #发送数据
c.close()
- 客户端
import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host, port))
print s.recv(1024)
- urllib和urlib2模块
- 打开远程文件urlopen,支持迭代、close、readline、readline和readlines。
- 获取远程文件
urlretrieve('http://www.baidu.com','c:\\baidu.html')
- SocketServer模块
from SocketServer import TCPServer, StreamRequestHandler
class Handler(StreamRequestHandler):#处理程序
def handle(self):
addr = self.request.getpeername()
print ('Got connection from', addr)
self.wfile.write('Thank you for connecting')
server = TCPServer(('', 1234), Handler)
server.serve_forever()
2、多连接
- 分叉(forking)
from SocketServer import TCPServer, ForkingMixIn, StreamRequestHandler
class Server(ForkingMixIn, TCPServer): pass
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from', addr
self.wfile.write('Thank you for connecting')
server = Server(('', 1234), Handler)
server.serve_forever()
- 线程
from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler
class Server(ThreadingMixIn, TCPServer): pass
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from', addr
self.wfile.write('Thank you for connecting')
server = Server(('', 1234), Handler)
server.serve_forever()
- 异步I/O
处理方法:只处理在给定时间内真正要进行通信的客户端
时间片轮转的方式提供服务。
import socket, select
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
s.listen(5)
inputs = [s]
while True:
rs, ws, es = select.select(inputs, [], []) #The return value is a triple of lists of objects that are ready
for r in rs:
if r is s:
c, addr = s.accept()
print ('Got connection from', addr)
inputs.append(c)
else:
try:
data = r.recv(1024)
disconnected = not data
except socket.error:
disconnected = True
if disconnected:
print (r.getpeername(), 'disconnected')
inputs.remove(r)
else:
print data