`

python学习小结3

阅读更多
一 文件


   1)open 函数
       o=open(files+'\\files.doc','w');

o.write('DDDDDDDDDDDDDD');
o.close();

   2) 文件的读取
       A read()函数
     一次将文件中的所有数据读出来
       o=open("xxxx.txt")
        content=o.read(20)  //读前20个字符
        content1=o.read()  //读所有字符
        o.close()
      B readline()函数
          每次只读取文件中的一行数据
          content=o.readline();
      C readlines()函数  读取N行,然后循环
         contents=o.readlines();
        for content in contents:
             print content;
   3)写入
       listabc=["xxxxxxxxxxx"];
       o.writelines(listabc);
        //用一个集合的方式写入文件
    
   4) os是python的标准模块,提供了统一的操作系统接口函数,能在不同系统间切换。
     比如文件删除时 
      import os;
        if os.path.exists("d:\xxxxxxxxxxx");   
  os.remove("d:\xxxxxxxx\xxx.txt");
   5) copyfile()函数
       import shutil  //文件高级操作的API
        shutil.copyfile(src,dst)
   6) mkdir函数
      import os;
       os.mkdir(dir)

      mkdirs()函数
         设置多个目录
       os.mkdirs("d:\\ddd\ddd\dddd\\\ddd")  //设置多级目录
    7) rmdir(dir)  //删除空目录
       os.rmdir("d:\\xxxxxx");
     rmtree函数
         删除非空目录
        import shutil;
         shutil.rmtree("d:\\\\\\\\");
     9) os.walk()函数
        读取指定目录下的文件并返回
          
         def ListDir (path,fun,par):
for filespath in par:
print os.path.join(fun,filespath);
if __name__=="__main__":
os.walk("d:\it",ListDir,());
           其中,os.walk中,第一个参数为目录的路径,第2个参数为回调方法,上面就是列出it目录下的所有文件。
但如果要把下面的子目录及文件也一起列了,则需要
        os.path.walk函数中,walk(path,topdown=true,onerror=none)
                其中第2个参数默认TRUE,表示先返回目录树下的文件,然后遍历目录树的子目录,当为FALASE时,先遍历子目录,
然后返回子目录下的文件,最后返回根目录下的文件


二 异常
    1) 格式
        try:
            a=1/0
         except (异常1,异常2,......),e:
          print e
      或
         try:
             a=1/0
         except 异常1:
              。。。。。。
         except 异常2:
           ..............
     2) try:
           num=1/0
        except  IndexError,indexError:  //(异常对象1),(异常信息标识)
            print  indexError
           .......
         else:
           ................

      3)try :
               .............
         finally:
            ..................
      4) 自定义异常
           class MyError(Exception):

           //自定义异常的名以Error结尾。
            
       try :
         raise MyError(....)
       exception MyError,e:
            print e.value       

三  持久化
    1 使用dbhash模块读写数据
      DBM是文件式数据库,用哈希保存,不具备管理能力,但比普通文件可靠。windows用dbhash进行读取
      import dbhash
   db=dbhash.open('filename','c')  //c表示创建数据库,r,w表示读写。
   db['abc']='dddddd'
   db.inseritems()  //插入
   但缺点是dbhash只支持字符串,不支持其他类型,比如db['abc']=1 则出错

   2 使用shelve模块写数据
      其返回的字典类型可以支持python中的基本类型等。
     import shelve
     db=shelve.open("mydb")
     db['ddsd']=['sdsd','sdsd','sdsd','sdsdsdsd']
      .......................

    3  SQLITE的一个简单操作例子
        import sqlite3 #导入sqlite3模块
conn=sqlite3.connect('userDB.db') #连接数据库userDB,如果userDB不存在,则创建数据库userDB
cur=conn.cursor()
print '---------未处理之前的数据-----------'
conn.execute("create table if not exists address(id integer primary key autoincrement,name varchar(128),address

varchar(128))") #如果address表不存在,则创建表address
conn.execute("insert into address(name,address)values('dcy','zhengzhou')") #添加一条数据到表address
cur.execute("select * from address")
res=cur.fetchall() #调用游标对象cur的fetchall()方法返回表address中的所有数据
print "address:",res #输出结果集

for line in res: #输出结果集
for f in line:
print f

conn.execute("delete from address where id=12")
conn.execute("delete from address where id=17")
conn.execute("delete from address where id=30")
conn.execute("delete from address where id=30")
strUpdate=raw_input('请选择您要修改某条数据的编号:')
strId=raw_input('请选择您要删除某条数据的编号:')

conn.execute("update address set name='maxianglin' where id="+strUpdate)

conn.execute("delete from address where id="+strId)
conn.commit() #手动提交
print '-------------处理之后的数据----------------'
cur.execute("select * from address") #调用游标对象cur的execute方法查询表address中的数据
res=cur.fetchall() #调用游标对象cur的fetchall()方法返回表address中的所有数据
print "address:",res #输出结果集

for line in res: #输出结果集
for f in line:
print f
cur.close() #关闭游标对象cur
conn.close() #关闭数据库链接对象conn


四 网络设计模块
    1 urllib2模块  适合高级网络应用,比如HTTP验证等,一般的可以用urllib.
     import urllib2
      response=urllib2.urlopen("http://www.sohu.com")
      html=response.read()
       print html
    2 urlretrieve方法
       import urllib
       urllib.urlretrieve('http://www.sohu.com','d:\\xxxx.html')
    3 简单的socket服务器
      import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()
port=1234
s.bind((host,port))
s.listen(5) //5为连接队列的长度
while True:
    c,addr=s.accept()
    print '连接来自:',addr
    c.send('恭喜你!一个简单的服务器创建成功!')
    c.close()
    4 socketserver模块
       其中针对TCP的有tcpserver,udpserver,unixstreamserver和unixdatagramserver
     服务端:
        from SocketServer import TCPServer,StreamRequestHandler
class Handler(StreamRequestHandler):
    def handle (self):
        addr=self.request.getpeername()
        print '获取的连接来自:',addr
        self.wfile.write('恭喜你!连接成功!')    //wfile用来些如 ,self.rfile用来读取
server=TCPServer(('',1234),Handler)
server.serve_forever()  //循环监听

    客户端:
          import socket
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
host=socket.gethostname()
port=1234
s.connect((host,port))
print s.recv(1024)
s.close()

   5 简单的服务端和客户端程序:
        import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.bind(('localhost', 8001))
sock.listen(5)
while True:
    connection,address = sock.accept()
    try:
        connection.settimeout(5)
        buf = connection.recv(1024)
        if buf == '1':
            connection.send('welcome to server!')
        else:
            connection.send('please go out!')
    except socket.timeout:
        print 'time out'
    connection.close()

     客户端:
     import socket
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 8001))
time.sleep(2)
sock.send('1')
print sock.recv(1024)
sock.close()


四 异步通信方式
   应付多个连接,采用异步方式,分别为分叉,线程方式和异步方式

1)分叉(fork) :主进程会有响应的一个子进程来处理此连接,而主进程依然保持在侦听状态,不会阻塞主线程,
当客户端结束请求时,子进程退出,例子
   from SocketServer import TCPServer , ForkingMixIn , StreamRequestHandler
class Server(ForkingMixIn , TCPServer):
    pass
class Handler(StreamRequestHandler):
    def handle (self):
        addr=self.request.getpeername()
        print '获取的连接来自:',addr
        self.wfile.write('使用Fork方式实现多连接')
if __name__=='__main__':   
    server=Server(('localhost',1234),Handler)
    server.serve_forever()


2)  采用线程方式:
class Server(ThreadingMixIn , TCPServer):
    pass
。。。。。。

3) 异步IO方式
     1 select方式使用
          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,[],[])
    for r in rs :
        if r is s:
            c,addr=s.accept()
            print '获取连接来自:',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


   2、POLL方式
    import socket , select
s=socket.socket()
host=socket.gethostname()
port=1234
s.bind((host,port))
fdmap={s.fileno():s}
s.listen(5)
p=select.poll()       #生成Polling对象
p.register(s)         #注册Socket对象
while True:
    events=p.poll()   #获取准备好的文件对象
    for fd,event in events :
        if fd is fdmap:
            c,addr=s.accept()
            print '获取连接来自:',addr
            p.register(c)
            fdmap[c.fileno()]=c      #加入连接Socket
        elif event & select.POLLIN:
            data=fdmap[fd].recv(1024)
            if not data:          #没有数据
                print fdmap[fd].getpeername(),'disconnected'
                p.unregister(fd)
                del fdmap[fd]
        else:
            print data


   3 asyncore模块
       import asyncore, socket
class http_client(asyncore.dispatcher):
    def __init__(self, host, path):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.connect((host, 80))
        self.buffer = 'GET %s HTTP/1.0\r\n\r\n' % path
    def handle_connect(self):
        pass
    def handle_close(self):
        self.close()
    def handle_read(self):
        print self.recv(8192)
    def writable(self):
        return (len(self.buffer) > 0)
    def handle_write(self):
        sent = self.send(self.buffer)
        self.buffer = self.buffer[sent:]
if __name__=='__main__':
    c = http_client('snaps.php.net', '/')
    asyncore.loop()
    print 'Program exit'

     例子
    import asyncore,socket

class AsyncGet(asyncore.dispatcher):
    def __init__(self,host):
        asyncore.dispatcher.__init__(self)
        self.host=host
        #创建Socket对象
        self.create_socket(socket.AF_INET, \
                            socket.SOCK_STREAM)
        self.connect((host,80))                        #连接服务器
        self.request='GET /index.html HTTP/1.0\r\n\r\n' #请求index.html页面
        self.outf=None
        print '请求的index.html来自:',host

    def handle_connect(self):
        print '连接:',self.host

    def handle_read(self):
        if not self.outf:
            print '正在创建连接::',self.host
        self.outf=open('%s.txt'%self.host,'wb')   #将服务器信息写入记事本中
        data=self.recv(8192)                #获取服务器发送过来的信息
        if data:
            self.outf.write(data)           #写入记事本中

    def writeable(self):
        return len(self.request)>0

    def handle_write(self):
        num_sent=self.send(self.request)       #发送客户端请求
       
    def handle_close(self):
        asyncore.dispatcher.close(self)
        print 'Socket对象关闭于:',self.host
        if self.outf:
            self.outf.close()
if __name__=='__main__':
    AsyncGet('www.python.org')
    asyncore.loop()


五  HTML处理
   1 urlparse
      import urlparse
      url=urlparse.urlparse("http:///xxxxxxxxxxxxxxxxxx")
      会将URL切割为不同的部分,变成一个元组,比如输出url.schema,url.path,url.params等

   2 urlunparse方法
     把各个部分拼接起来形成URL、
        url=urlparse.urlunparse(('http','abc.com.cn','/ddddd/dddd.php','','pid=12233''))
  3 urlparse.urljoin('http://xxxxx/admin/","sdsdsdsd/dsdsdsdsdd")
            实际上是将两部分地址进行拼接。
  4 urllib中的quote方法,对URL编码,其中的地址栏中的空格被编码为%20,用quote_plus编码时,地址中的空格被编码为+连接。
      而unquote方法,则是将已经编码的地址,重新解压其内容
        url=xxxxxxxxxxxx
        url.unquote(url)
        
  5 urlopen
     可以打开本地文件,如abc=urllib.urlopen("a.txt")
                          abc.info() //打开文件
                          abc.readline()  //只读一行数据

   6 httplib模块获得资源
       connection=httplib.httpconnection('http:/www.xxx.org')
        connection.request('get','/xxxx.html')
        re=connection.getresponse()
       print re.status()
             
       
六 XML处理
    SAX例子:
        import string
from xml.sax import*
class QuotationHandler(ContentHandler):
    def __init__(self):
        self.string=''   
    def startDocument(self): #开始处理文档时调用
        print '-------开始处理XML文档------'
        print 'name\tprice\taffect'
        print '--------------------------'
    def endDocument(self): #处理文档结束时调用
        print '-------处理结束XML文档-'

    nameStr=raw_input('请输入你想查看XML文档中的标签(title):')   
    def startElement(self, nameStr, attrs):
        print '-----------Start Element-----------'
        if nameStr == 'title':
            print '------标签为title下的数据-------'                    
            print attrs['name'],attrs['offer_id'],attrs['mobile_url']             
    def characters(self, ch):       
        self.string = self.string + ch
if __name__ == '__main__':  
    try:
        parser =make_parser()
        handler = QuotationHandler()
        parser.setContentHandler(handler)
        parser.parse("sample.xml")
    except:
        import traceback
        traceback.print_exc()


七 DJANGO
   1)安装  setup.py install
   2) 在setting.py中,是django的配置文件
      
   3)创建模版项目
      django-admin.py startproject Django_Pro
      生成有4个文件  
      __init__.py:用来指定python语言将此网站目录作为python的包
       manage.py:管理django项目
        setting.py:配置文件
       urls.py:包含url的配置文件。
   4) 启动内置服务器
       manage.py runserver  //到项目所在路径中运行
       默认使用localhost:8000端口监听,也可以更改
           manage.py runserver 8001
           manage.py runserver 0.0.0.0:8000 允许其他机器访问此web服务器
   5) 修改settings.py中的数据库配置文件,修改database部分
   6) manage.py syncdb 即会生成对应的xxxx.db3文件
   7) 然后生成DJANGO应用
        manage.py startapp Users
       则会生成一个users目录,修改其中的model.py文件,定义数据模型
       from django.db import models

# Create your models here.
class Users(models.Model):
    username = models.CharField('用户名',max_length=20)
    password = models.CharField('密码',max_length=20)
    realname = models.CharField('真实姓名',max_length=255)
    sex = models.CharField('性别',max_length=10)
    email = models.EmailField('电子邮箱',blank=True)

    def __str__ (self):
        return '%s'%(self.username)
   
    然后在settings.py中加入此应用
      INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Django_Pro.Users',

    再继续用manage.py syncdb生成数据库中的Users_users表。

8)URL控制,是在项目根录下的urls.py中可以看到定义的URL规则,比如:

     from django.conf.urls.defaults import *
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    (r'^$', 'views.home'),
    (r'^Users/', include('Django_Pro.Users.urls')),
    #(r'^$', 'Django_Pro.Users.views.index'),
    #(r'^Django_Pro/', include('Django_Pro.foo.urls')),
    #(r'^Users/',include('Django_Pro.Users.urls')),
    (r'^admin/',include(admin.site.urls)),
    (r'^login/$','Django_Pro.views.login'),
    (r'^pro/$','Django_Pro.views.proList'),
    (r'^buy/$','Django_Pro.views.buyPro'),
    (r'^fruit/$','Django_Pro.views.fruitList')
   
)

          而在各模块,比如users下中也有对应的url.py,如:
urlpatterns = patterns('',
    url(r'^$', 'Users.views.index'),
    url(r'^random_number/$', 'Users.views.random_number'),
)


9) 静态视图  在项目根目录中,views.py可以写视图。
10) 模版文件,可以在setting.py中,设立模版目录,如
    TEMPLATE_DIRS = (
  
    './templates',
   
)
   一个模版样例文件:
   {% if latest_users_list %}
    <ul>
    {% for user in latest_users_list %}
        <li><a href="/users/{{ user.id }}/">{{ user.username }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p>没有有效的数据!</p>
{% endif %}

     在users\views.py中,加入控制文件:
from django.shortcuts import render_to_response
from Django_Pro.Users.models import Users

def index(rq):
    latest_users_list = Users.objects.all().order_by('-username')[:5]
    return render_to_response('users/index.html',{
        'latest_users_list':latest_users_list
    })

并且在项目根目录的urls.py中配置
    urlpatterns = patterns('',
 
    (r'^$', 'Django_Pro.Users.views.index'),

   .....
   
   
11 增加管理界面
      1) 要加入admin元组管理
       INSTALLED_APPS = (  'django.contrib.admin',
                   .............................
      2)生成数据库 
             manage.py syncdb
       3)修改根目录下的urls.py,增加支持
        (r'^admin/',include(admin.site.urls)),

       4) 在users目录下生成一个admin.py文件
      from django.contrib import admin
from Django_Pro.Users.models import Users
admin.site.register(Users)
     5) 如果要汉化的话,修改成language_code='zh-CN',修改settings.py
     6)http://localhost:8000/admin运行


12   支持SESSION
      1) 需要在setting.py 中修改middleware_classes元组类型的属性值
        MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
     同时在配置文件中的installed_apps元素中加入:
      INSTALLED_APPS = (
 
    'django.contrib.sessions',

    2)使用时
       request.session['username']=username
       在模版中,可以这样  {{request.session.username}}  ..........
但要记得在settings.py中,将
      TEMPLATE_CONTEXT_PROCESSORS = (
    
    "django.core.context_processors.request"
分享到:
评论

相关推荐

    Python学习手册(第3版)中文版

    《Python学习手册(第3版)》讲述...除了有许多详实说明和每章小结之外,每章还包括一个头脑风暴:这是《Python学习手册(第3版)》独特的一部分,配合以实用的练习题和复习题,让读者练习新学的技巧并测试自己的理解程度。

    Python学习总结.docx

    Python学习总结 Python学习总结全文共34页,当前为第1页。Python学习总结全文共34页,当前为第1页。Python总结 Python学习总结全文共34页,当前为第1页。 Python学习总结全文共34页,当前为第1页。 目录 Python总结 ...

    Python学习总结

    大佬的Python学习总结

    Python学习总结的一些经验

    Python学习总结的一些经验

    python学习个人归纳总结

    学习归纳总结:python学习个人归纳总结,后续还有各种字符串操作函数

    Python实践总结

    Python常用技巧,技术,框架等总结

    Python学习心得&总结.doc

    Python学习心得&总结.doc

    清华大学精品Python学习PPT课件-第12章 Python项目实战:数据可视化.pptx

    清华大学精品Python学习PPT课件-第1章 Python3概述.pptx 清华大学精品Python学习PPT课件-第2章 Python基本语法.pptx 清华大学精品Python学习PPT课件-第3章 Python流程控制.pptx 清华大学精品Python学习PPT课件-第4章...

    Python学习PDF总结

    Python 学习知识总结

    Python学习总结材料.pdf

    Python学习总结材料.pdfPython学习总结材料.pdfPython学习总结材料.pdfPython学习总结材料.pdfPython学习总结材料.pdfPython学习总结材料.pdfPython学习总结材料.pdfPython学习总结材料.pdfPython学习总结材料.pdf

    Python学习总结37100.pdf

    Python学习总结37100.pdfPython学习总结37100.pdfPython学习总结37100.pdfPython学习总结37100.pdfPython学习总结37100.pdfPython学习总结37100.pdfPython学习总结37100.pdfPython学习总结37100.pdf

    Python学习手册(第3版)

    除了有许多详实说明和每章小结之外,每章还包括一个头脑风 暴:这是《Python学习手册(第3版)》独特的一部分,配合以实用的练习题和复习题,让读者练习新学的技巧并测试自己的理解程度。, 《Python学习手册(第3版)》...

    最新Python学习笔记3

    最新Python学习笔记,Day 3,总结性学习笔记,适合初学者归纳总结。

    python开发总结——c程序员python之路

    python开发总结——c程序员python之路 我在工作中写的python总结,适合学习python的c程序员。

    Python学习手册(第3版).pdf 高清有书签

    除了有许多详实说明和每章小结之外,每章还包括一个头脑风 暴:这是《Python学习手册(第3版)》独特的一部分,配合以实用的练习题和复习题,让读者练习新学的技巧并测试自己的理解程度。, 《Python学习手册(第3版)》...

    Python学习总结.doc

    Python总结 目录 Python总结 1 前言 2 (一)如何学习Python 2 (二)一些Python免费课程推荐 3 (三)Python爬虫需要哪些知识 4 (四)Python爬虫进阶 6 (五)Python爬虫面试指南 7 (六)推荐一些不错的Python...

    python 读写 Excel 学习总结

    python 读写 Excel 学习总结

    Python学习总结.zip

    Python学习总结

    python学习笔记 Python学习知识总结 Python编程开发总结 共10页.pdf

    python学习笔记 Python学习知识总结 Python编程开发总结 共10页.pdf

    Python学习手册

    除了有许多详实说明和每章小结之外,每章还包括一个头脑风暴:这是《Python学习手册(第3版)》独特的一部分,配合以实用的练习题和复习题,让读者练习新学的技巧并测试自己的理解程度。, 《Python学习手册(第3版)》...

Global site tag (gtag.js) - Google Analytics