您的位置:首页 > 理论基础 > 计算机网络

python----文件、数据库、网络编程

2014-04-01 16:07 453 查看

一.文件

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)

             open函数第3个参数控制文件的缓冲。
             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。

urlopen('http://www.baidu.com')

获取远程文件
urlopen提供读取数据的类文件对象。如果希望urllib为你下载文件并在本地文件中储存一个文件的副本,使用urlretrieve,返回元组(filename,headers)而不是文件对象。
urlretrieve('http://www.baidu.com','c:\\baidu.html')

SocketServer模块
SocketServer模块是标准库中很多服务器框架的基础,包含四个基本类:TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer.
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
机制:select模块的select函数、poll函数
处理方法:只处理在给定时间内真正要进行通信的客户端
时间片轮转的方式提供服务。
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: