my python FAQ

來源:互聯網
上載者:User
  1. python編碼規範
  2. http://google-styleguide.googlecode.com/svn/trunk/pyguide.html
  3. 判斷對象是否含有某屬性 
    if hasattr(object, 'attribute')
  4. 反射擷取類執行個體
    globals()['ClassName']()
  5. python日期轉換 
    字串到日期:
    import time
    timeInDate = time.strptime(timeInStr,"%Y-%m-%d %H:%M:%S")
    日期到字串:
    timeInStr = time.strftime("%Y/%m/%d %H:%M:%S", time.localtime())
    timeInStr = time.strftime("%Y/%m/%d %H:%M:%S", timeInDate)
  6. 尋找列表中的指定值
    guids = []
    guids.append(1)
    guids.append(3)
    guidTofind = 4
    guidin = filter(lambda g: g==guidTofind, guids)
    #不在列表中
    if len(guidin)==0:
  7. python三元運算式
    s = ('negitive', 'positive')[n >= 0]
  8. python靜態方法
    註解式:
    @staticmethod
    def bar():
    print Foo.str
    other:
    def bar():
    print Foo.str
     bar = staticmethod(bar)
  9. pylint代碼掃描規範工具Windows下安裝
    pylint用於代碼自動分析,配置後eclipse設定build Automatically,每次儲存後產生報告,說明你的代碼是否符合編程規範,並給你打分(我的一份可以跑通的代碼是 -13/10 ,負13,汗顏。。。)
    參考http://www.logilab.org/card/pylint_manual
    但是結果仍然提示: can't open file 'D:\Python26\Scripts\pylint': [Errno 2] No such file or directory
    需要開啟 D:\pylint-0.22.0\bin 目錄,然後把那裡的所有檔案拷貝到 Python 的
    Scripts 目錄下( 如:D:\Python26\Scripts)
    在命令列嘗試執行 pylint,如果輸出協助,則表示已經安裝成功
    pylint預設的規範不符合駝峰方式的變數和方法命名方式 可視需要建立一份公用conf檔案 確定變數和方法的Regex
    配置草案: pylint.conf
    可添加到eclipse=>Window=>preferences=>Pydev=>Pylint
    use Pylint勾上,location of pylint填入下載包pylint的本地路徑 D:\develop\pylint\pylint-0.22.0\lint.py
    arguments框裡填入: --rcfile=C:\Python26\Scripts\pylint.conf
  10. 檢測檔案是否存在
    import os.path
    os.path.isfile(fname)
  11. post xml by http request
    import httplib, urllib
    params = urllib.urlencode( \
    {'parameter': pValue, "p":valuep})
    headers = { "Content-type": "text/xml,charset=utf-8"}
    conn = httplib.HTTPConnection(self.webHost+":"+self.webPort)
    conn.request("POST", "/"+self.webPath+"/?"+params, content , headers)
    response = conn.getresponse()
    print response.status, response.reason
    print response.read()
    conn.close()
  12. cherrypy 訪問靜態資源
    html css js 圖片等資源的存取方法:
    cherryd -i cpapp -c prod.conf
    cherrypy.quickstart(Root(), '/', config=conf)
    詳見: http://www.cherrypy.org/wiki/StaticContent
  13. python binding cpp
    boost方式:
    建立hello.cpp
    char const* greet(unsigned x)
    {
    static char const* const msgs[] = { "hello", "Boost.Python", "world!" };
    if (x > 2)
    return "nothing";
    return msgs[x];
    }

    binding用的cpp hello_wrap.cpp

    #include 
    #include
    using namespace boost::python;
    char const* greet(unsigned x);
    BOOST_PYTHON_MODULE(hello)
    {
    def("greet", greet, "return one of 3 parts of a greeting");
    }

    編譯:
    sudo g++ -lpython2.5 -lboost_python -I/usr/include/python2.5 hello.cpp hello_wrap.cpp -shared -o hello.so

    在目前的目錄下產生hello.so檔案 python 命令列 :
    >>>import hello
    >>> print hello.greet(1)
    Boost.Python
    >>>

    python ctypes方式: http://blogold.chinaunix.net/u/21908/showart_2225882.html

  14. Python 中的 True
    在 2.2.1 版本之前,Python 沒有單獨的布林值資料型別。為了彌補這個缺陷,Python 在布爾環境 (如 if 語句) 中幾乎接受所有東西,遵循下面的規則:
    • 0 為 false; 其它所有數值皆為 true。
    • 空串 ("") 為 false; 其它所有字串皆為 true。
    • 空 list ([]) 為 false; 其它所有 list 皆為 true。
    • 空 tuple (()) 為 false; 其它所有 tuple 皆為 true。
    • 空 dictionary ({}) 為 false; 其它所有 dictionary 皆為 true。
     這些規則仍然適用於 Python 2.2.1 及其後續版本,但現在您也可以使用真正的布爾值,它的值或者為 True 或者為 False。請注意第一個字母是大寫的;這些值如同在 Python 中的其它東西一樣都是大小寫敏感的。
  15. python進程異常終止問題
    可能原因:cmd調用出錯 記憶體塊讀取錯誤 程式錯誤
    項目中遇到是程式錯誤 沒有進行except擷取引起 例如
    i = 1
    while True:
    i = i+1
    if i==100:
    i/0

    出現除0錯誤 則進程終止
    def test():
    i = 1
    while True:
    i = i+1
    print [c.name for c in messages.columns]
    if i==100:
    i/0
    try:
    test()
    except Exception:
    print Exception
    函數內部不捕獲 由外圍捕獲 也會造成進程終止

  16. 假設當前項目有幾個檔案夾(core,domain,util)的類需要安裝到python中 
    建立setup.py
    from setuptools import setup
    setup(name='scservice',
    version='0.1.0',
    description="Easy python framework for sc service",
    packages = ['core','domain','util'],
    platforms = 'any',
    keywords='framework for sc service',
    author='shen guanpu',
    author_email='shenguanpu@netqin.com',
    url='www.netqin.com',
    license='(c) 2010 NetQin',
    include_package_data=True,
    zip_safe=False,
    )
    正常情況下packages應該寫項目名稱 或者僅安裝項目的幾個模組 則 packages = ['scservice.core','scservice.domain','scservice.util'],

    sudo python setup.py develop 可建立連結檔案,如果svn有更新 可update下來 不需要再運行安裝即可使用
    sudo python setup.py install 則直接安裝幾個檔案夾到 /python/lib/site-packages之下
    測試: 進入python 命令列:
    from core.rule import Rule
    不報錯說明安裝成功

  17. str 為何可用for遍曆?(from python mail list)
    str 沒有像list一樣提供__iter__()方法,不能產生迭代對象,但卻可用for 去遍曆
    原因是:
    Python's for statement iterates over the items of any sequence (a list
    or a string), in the order that they appear in the sequence.

    for針對的是sequence,只要是sequence,它都能處理。

    sequence protocol在這裡有定義:
    http://docs.python.org/library/functions.html#iter

    the __getitem__() method with integer arguments starting at 0

    也就是說,只要有__getitem__方法,都算是sequence,for都能處理。
    驗證一下:
    class A(object):
    def __getitem__(self, item):
    print 'getitem:', item
    if item == 5:
    raise IndexError()
    return item

    for i in A():
     print i

  18. dict list轉換
    構建空值的dict dict.fromkeys([1,2,3]) => {1:None,2:None,3:None}
    構建dict dict([(1,2),(2,3)]) => {1:2, 2:3}
    從dict的key 構建list list( {1:2, 2:3}) => [1,2] or {1:2, 2:3}.keys()
    從dict的value構建list [j for i,j in {1:2, 2:3}.iteritems()]
  19. 安裝python
    wget http://www.python.org/ftp/python/2.6.5/Python-2.6.5.tar.bz2
    解壓: $bzip2 -d Python-2.5.2.tar.bz2
    $ tar -xvf Python-2.5.2.tar
    轉移位置:
    $ mv Python-2.6.5 /usr/local/
    l 安裝
    $ cd Python-2.6.5
    $ ./configure
    $ make
    $ make install
    l 如果預設版本沒有被替換 則需建立軟連結
    $cd /usr/bin
    $ll |grep python //查看該目錄下python
    $rm -rf python
    $ln -s /usr/local/Python-2.6.5/python ./python //軟連結
  20. 檢查變數是否defined
    a = 1
    if a in dir()
  21. Pycurl 綁定到特定的IP地址

    def iptest(ip) :
    c = pycurl.Curl()
    c.setopt(c.URL, "http://www.ip138.com/ip2city.asp")
    # 綁定到特定的IP地址
    c.setopt(pycurl.INTERFACE,ip)
    c.perform()
    c.fp = StringIO.StringIO()
    print c.fp.getvalue()
    c.close()
  22. python 多進程中使用random隨機數

    Linux的fork是寫複製的,即fork出來的進程只有修改了的部分才另外開闢記憶體;而隨機數是根據
    種子數值得出的偽隨機數,fork出來的進程的種子相同,所以數值相同。因此每次做完random後,
    需要random.seed(),這樣能產生新的隨機數

    def executeChangeable():
    pid = os.getpid()
    random.seed()
    randpart = random.randint(10000000, 99999999)
    return pid, randpart

    uuid方式:

    >>> import uuid

    # make a random UUID
    >>> uuid.uuid4()
    UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

     

  23. python抓取http代理
    def getproxycn():

    portDict = {"R":"8","D":"0","C":"1","M":"4","Z":"3","K":"2","I":"7","L":"9","B":"5","W":"6"};

    pagenum = 0

    num = 0;

    proxyfile = "proxys.txt"

    file = open(proxyfile,"w+");

    while pagenum <= 9:

    url='http://www.cnproxy.com/proxy'+str(pagenum + 1)+'.html'

    html=urllib2.urlopen(url)

    for line in html:

    if "HTTP" in line:

    arra = line.upper().split("<TR><TD>")

    arrb = arra[1].split("<SCRIPT TYPE=TEXT/JAVASCRIPT>")

    ip = arrb[0]

    port = arrb[1].split(")</SCRIPT>")[0].split("DOCUMENT.WRITE(\":\"")[1]

    port = port.replace("+","");

    p = "";

    for i in range(len(port)):

    alph = port[i:i+1]

    p += portDict[alph];

    print ip + ":" + p

    file.write(ip+":"+p+"\n")

    num += 1;

    pagenum += 1;

    file.close();

    print "已處理代理總條數 : " + str(num)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.