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

来源:互联网 发布:c语言标识符和关键字 编辑:程序博客网 时间:2024/05/16 12:33

一.文件


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 fileinputfor 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 sqlite3conn=sqlite3.connect('数据库文件名.db')#相对路径或绝对路径curs=conn.cursor()#获取连接的游标conn.commit()#提交conn.close()


三、网络编程

1、网络模块

  • socket模块
    • 服务器
import sockets = socket.socket()host = socket.gethostname()port = 1234s.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 sockets = socket.socket()host = socket.gethostname()port = 1234s.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, StreamRequestHandlerclass 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, StreamRequestHandlerclass Server(ForkingMixIn, TCPServer): passclass 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, StreamRequestHandlerclass Server(ThreadingMixIn, TCPServer): passclass 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, selects = socket.socket()host = socket.gethostname()port = 1234s.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




0 0
原创粉丝点击