zoukankan      html  css  js  c++  java
  • Python笔记

    python
    
    
     |--数据类型
              |--整型,长整型,浮点型,字符串,布尔型,空值
            |--浮点型
                当有一个为浮点,结果必为浮点
            |--字符串
                与Java不同,‘’和“”在python中是一个意思,哪个被用过了就用另一个    当字符串中还有标点符号时,可以在前面加转义。 也可以在字符串前面加r即r'xxx'
        当有很多符号,且多行时可以这样r'''  xxx,xxxx!|||sss ''',不加r的话里面都要加,ur的话字符串可以有中文
    
    
    |--注释
         在前面加#即可
    
    
    
    
    |--数组
        |--list 
            |--访问索引
                依据下标如:L[1],下标由0开始,当为-1时表示最后一个,-2位倒数第二个,以此类推
            |--添加
                L.append()表示在数组最后一位加数据
                L.insert(n)表示在数组固定下标插入,后面的元素自当往后移动下标
            |--删除pop
                L.pop()删除最后一个
                L.pop(n)删除指定下标数组元素
        |--tuple
            |--与list区别
                list是动态的括号用中括号【】,tuple是静态的无法更改括号用(),一旦设定好久无法改
            |--实现假“动态”
                在tuple中加入list数组如L=('A','B',['X','Y'])
                取出来只需A=L(2)
                更改时只需A(0)=xxx
    |--条件判断和循环
         |--if else 和elif
            if后面不用加(),但是条件结束后一定要加:
            python在同一排表示一个代码语句块,不需要花括号{    }
            因此写完条件后,当要写循环执行体时要换行然后空四格(规定)
        |--for
            类似Java中的foreach语句  
            如 for 变量 in 数组:
    |--dict和set
        |--dict
                |--含义
                    类比java中的哈希表  key-value  
                |--用法 
                    d{
                        xx:xx,    
                        yy:yy
                        }
                    |--增删查改
                        查: d.get(xx)  括号内看是什么值  若xx没有则返回none  
                            or d[xx] 若xx不存在则报错  因此要先判断是否存在  if xx in d ........
                        增:d[xx]=xx
                    |--遍历for
                        for key in d
                        prinf key
    
    
    prinf 后面输出值+是用于连接字符串用  ,加上变量用“,”就行了
    
        |--set        |--含义
                    set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,    与dict差不多区别在于没有value
                |--用法
                    s=set([(xx,yy),(xx1,yy1),(xx2,yy2)])
                    打印时for x in s
                        print x[0],x[1]         x随便取,在【】中的每一个括号()代表一个元素  一个元素可以有1个或者多个值,所有会有下标打印
                    |--加
                    s.add(5),若set中存在则没有变化
                    |--删
                    s.remove(2),若set中不存在则报错  需要判定在写remove
    
    for if语句别忘记加:!!!
    
    |--函数
        |--查询
            可以直接从Python的官方网站查看文档:
            http://docs.python.org/2/library/functions.html#abs
    python中没有x++
    
    
    |--切片
        |--用处
            可以用于对list ,打印不需要用循环  只需要在里面加:
        |--实例
            L[:]  打印所有
            L[:3]  若从下标0开始  则可以省略  到索引3不包括3
            类似于列表函数range(x)
                for i range(10)
                打印i0-9
    
        |--倒序切片
            记住倒数第一个元素的索引是0。倒序切片包含起始索引,不包含结束索引。
            L[-2:]表示倒数第一个和第二个
    
     |--python中如何将两个list合并成一个list,不用for语句
    
        1, add
    
        2, 用list的extend方法,L1.extend(L2),该方法将参数L2的全部元素添加到L1的尾部,例如:
    
        3, 用切片(slice)操作,L1[len(L1):len(L1)] = L2和上面的方法等价, 
    
    |--但切片方法用起来更灵活,可以插入到头部,或其他任意部位,也可以加到中间.
    
    |--注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括:
        1. 有序集合:list,tuple,str和unicode;
        2. 无序集合:set
        3. 无序集合并且具有 key-value 对:dict
    
    |--索引迭代
        |--含义:迭代永远是取出元素本身,而非元素的索引。想在 for 循环中拿到索引,怎么办?方法是使用 enumerate() 函数:
        在enumerate下的list中每一个元素都隐藏着一个tuple  即值前有一个索引
            |--实例    for index, name in enumerate(L):
                    print index, '-', name
    |--拓展    
        zip()函数可以把两个 list 变成一个 list:>>> zip([10, 20, 30], ['A', 'B', 'C'])
                        [(10, 'A'), (20, 'B'), (30, 'C')]
    |--dict 的value迭代
         |--dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:
    
            d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
            print d.values()
            # [85, 95, 59]
            for v in d.values():
                print v
    
        |--类同
            还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:
        |--不同
            1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
    
            2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
    
            3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环    ,而内部如何迭代我们通常并不用关心。
    
            如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
    
    |--求容易 长度
        x=[xx,yy,zz]
        len(x)
    
    |--dict 的items()
            首先,我们看看 dict 对象的 items() 方法返回的值:
    
        >>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
        >>> print d.items()
        [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
    
        可以看到,items() 方法把dict对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value
    
            >>> for key, value in d.items():
                print key, ':', value
                    
                Lisa : 85
                Adam : 95
                Bart : 59
    
    |--列表
    
        列表生成式的 for 循环后面还可以加上 if 判断。例如:
    
            >>> [x * x for x in range(1, 11)]   
            [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
    
            如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:
    
            >>> [x * x for x in range(1, 11) if x % 2 == 0]   //在修改range的情况下是这样的 [x * x for x in range(2, 11,2) ]
            [4, 16, 36, 64, 100]
    
        |--列表实例
    
            L = []
            for m in 'ABC':
                for n in '123':
                    L.append(m + n)
    
            列表:
    
            >>> [m + n for m in 'ABC' for n in '123']
            ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
    
    |--爬虫
    
        |--组成
            URL管理器
                |-实现方式
                    1.python本内存  set()适用于较小存储
                    2.关系数据库mysql  
                    3.缓存数据库  set
            网页下载器
    
                |--种类
                    1.urllib2  python官方基础模块
                           |--urllib2的三种使用方法
    
                            |--1最简洁方法:
                                url='http://www.baidu.com'
    
                                print 'url管理器 第一种方法:'
                                response1=urllib2.urlopen(url)
                                print response1.getcode()
                                print len(response1.read())
                            |--2可以添加data、http header伪装的方法
                                print 'url管理器 第二种方法:'
                                request=urllib2.Request(url)
                                request.add_header("user-agent", "Mozilla/5.0")//添加数据的时候为 request.add_data('x','y')
                                response2=urllib2.urlopen(request)
                                print response2.getcode()
                                print len(response2.read())
                            |--3添加特殊情景的处理器  四种:HTTPCookieProcessor 、ProxyHandler、HTTPHandler、HTTPRedirectHandler
                                print 'url管理器 第三种方法:'
                                  cj=cookielib.CookieJar()
                                opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
                                urllib2.install_opener(opener)
    
                                response3=urllib2.urlopen(url)
                                print response3.getcode()
                                print cj
                                print response3.read()
                    2.requests 第三方包
            网页解析器
                |--常见四种解析器 :正则表达式(模糊匹配)、html.parser、Beautiful Soup(主要用这个)、lxml (后三个为结构化解析)
    
    
                    |--Beautiful Soup4 
                        1.创建对象
                        from bs4 import BeautifulSoup
                #根据HTML网页字符串创建BeautifulSoup对象
                soup =BeautifulSoup(
                        html_doc,       #HTML文档的字符串
                        'html.parser' ,   #HTML的解析器
                        from_encoding='utf-8'   #HTML的文档编码
                        )
                        |--搜索方法
                            |--1.find_all(name,attrs,string)
                                #查找所有标签为div,class为abc,文字为Python的节点,因为class为关键字所有要变成classs_
                                soup.find_all('div',class_='abc',string='Python')
                            |--2.find
    
                        |--访问方法(获取节点信息)
                            
                            |--1node.name
                            |--2node['href']  #注意没有点
                            |--3node.get_text()
    
    
                    |--用法
                        1首先可以先快速获取网页代码来实验  进入文档获取html_doc 
                        2.创建对象soup
                        3.用find_all或者find来获取所需要的标签、属性、文本内容
                        4.print 出三个访问方法(上面有)
    
                        |--代码实例
    
    from bs4 import BeautifulSoup
    import re
    html_doc = """
    获取的网页代码内容省略。。。。。
    """
    soup=BeautifulSoup(html_doc,'html.parser',from_encoding='utf-8')
    print '获取所有链接'
    links=soup.find_all('a')
    for link in links:
       print link.name,link['href'],link.get_text()
       
       
    print '获取href="http://example.com/lacie"链接'
    link_node=soup.find('a', href="http://example.com/lacie")
    print link_node.name,link_node['href'],link_node.get_text()
    
    
    print '正则匹配'
    link_node=soup.find('a', href=re.compile(r"ill"))
    print link_node.name,link_node['href'],link_node.get_text()
    
    print '获取p段落文字'
    p_node=soup.find('p', class_="title")
    print p_node.name,p_node.get_text()
    
    
    爬虫项目:
    入口页:
    https://baike.baidu.com/item/Python/407313
    
    URL格式:
    /item/%s+%d+.htm
    
    数据格式:
        标题:
    <dd class="lemmaWgt-lemmaTitle-title">
    <h1>Python</h1>
    </dd>
        简介:
    <div class="lemma-summary" label-module="lemmaSummary">
    </div>
    
    
    
    <div class="para" label-module="para">如果您需要安装, 您不妨下载最近稳定的版本。 就是那个以没有被标记作为alpha或Beta发行的最高的版本。目前最稳定的版本是Python3.0以上<sup class="sup--normal" data-sup="2" data-ctrmap=":2,">
    [2]</sup><a class="sup-anchor" name="ref_[2]_21087">&nbsp;</a>
    </div>
    
    
    |--if __name__="__main__":
    添加if __name__ == "__main__"
    
    我们看到const.py中的main函数也被运行了,实际上我们不希望它被运行,因为const.py提供的main函数只是为了测试常量定义。这时if __name__ == '__main__'派上了用场,我们把const.py改一下,添加if __name__ == "__main__":
     ———————————————— 
    版权声明:本文为CSDN博主「anshuai_aw1」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/anshuai_aw1/article/details/82344884
  • 相关阅读:
    angularjs 做不到实时脏值查询
    移动端遮罩层,放在页面最上面,并且不能滚动
    angularjs 与 UEditor开发,添加directive,保证加载顺序正常
    ajaxfileupload.js上传文件兼容IE7及以上版本
    IE9及以下版本获取上传文件的大小
    java 中的 i++ 和 ++i
    java foreach实现原理
    怎样将未分配的磁盘空间,合并到指定盘符上面
    电脑将系统之间调整为最大时间之后,重新启动电脑,屏幕一直狂闪
    变量
  • 原文地址:https://www.cnblogs.com/fafafa123/p/11705549.html
Copyright © 2011-2022 走看看