Python Revisited Day 05(模塊)

5.1 模塊與包

在命令行輸入如下,檢查模塊是否存在python

python -c "import 模塊名"

在這裏插入圖片描述
表示沒有相應的模塊。
對於自定義模塊,能夠採用首字母大寫來避免與標準庫重複。算法

5.1.1 包

Graphics/
    __init__.py
    Bmp.py
    Jpeg.py
    Png.py
    Tiff.py
    Xpm.py

上面目錄包含了_init_.py文件,使其成了一個包。只要包目錄是程序目錄的子目錄,或者存在於Python路徑中,就能夠導入這些模塊。django

import Graphics.Bmp

若咱們編輯_init_.py爲:json

#__init__.py
__all__ = ['Bmp', 'Jpeg', 'Png', 'Tiff', 'Xpm']

那麼,就能夠使用下面的命令:cookie

from Graphics import *

多層嵌套也能夠的。網絡

Tips docstring 測試 doctest

#testdoc.py
def simpledoc(real, dream='sky'):
    """ Returns the text I can not control now...

    real is any string; dream is the same as well, while it has default value 'sky'.
    Of course, your different people has various dreams, but we all need to confront
    the real life.
    >>> simpledoc('god')
    'haha happy'
    >>> simpledoc('god', 'earth')
    "don't cry, go forward..."
    """

    if real == 'god' and dream == 'sky':
        return "haha happy"
    else:
        return "don't cry, go forward..."


if __name__ == "__main__":
    import doctest
    doctest.testmod()

在命令行內輸入(路徑啥的得弄好)app

python testdoc.py -v

獲得:dom

Trying:
    simpledoc('god')
Expecting:
    'haha happy'
ok
Trying:
    simpledoc('god', 'earth')
Expecting:
    "don't cry, go forward..."
ok
1 items had no tests:
    __main__
1 items passed all tests:
    2 tests in __main__.simpledoc
2 tests in 2 items.
2 passed and 0 failed.
Test passed.

5.2 Python 標準庫概覽

5.2.1 字符串處理

String

Struct

struct模塊提供了struct.pack(), struct.unpack()以及其餘一些函數,還提供了struct.Struct()類。struct.pack()函數以一個struct格式化字符串以及一個或多個值爲參數,並返回一個bytes對象,其中存放的是按照改格式規範表示的全部這些參數值。socket

data = struct.pack("<2h", 11, -9) # data == b'\x0b\x00\xf7\xff'
items = struct.unpack("<2h", data) # items == (11,-9)
TWO_SHORTS = struct.Struct("<2h")
data = TWO_SHORTS.pack(11, -9)
items = TWO_SHORTS.unpack(data) # (data, items)

格式是"<2h",表示,將倆個有符號的16位整數以小端的方法打包在一塊兒,其中:
"\x0b\x00" 表示11,事實上,11的16進製表示爲"0x000b",以小端的方式存儲就是"\x0b\x00",即低位在前,高位在後。
"\xf7\xff"表示-9,-9的16進製表示爲"\xff\xf7",注意,由於是負數,因此-9須要經過9的補碼來表示。9 --> 0b00001001, 其反碼爲:0b11110110, 補碼等於反碼加1:0b11110111, 因此,16進制就是:"\xff\xf7"

另外: "<H16s" 表示 第一個參數爲16位無符號整數, 第二個參數爲長度16的字節字符串。

符號 符號說明
< little-endian 小端 低位 --> 高位
> | ! big-endian 大端 高位 --> 低位
b 8位有符號整數
B 8位無符號整數
h 16位有符號整數
H 16位無符號整數
i 32位有符號整數
I 32位無符號整數
q 64位有符號整數
Q 64位無符號整數
f 32位浮點數
d 64位浮點數
? 布爾型
s bytes或bytearray

difflib

re

io.StringIO 類

sys.stdout = io.StringIO()

5.2.3 命令行設計

fileinput

optparse

5.2.4 數學與數字

int

float

complex

decimal

fractions

math

cmath 用於複數數學函數

random

Tips isinstance(a, type)

isinstance(1, int) #True
isinstance(1.0, int) #False
isinstance(1.0, str) #False
isinstance([], list) #list

Scipy

Numpy

5.2.5 時間與日期

import calendar, datetime, time

moon_datetime_a = datetime.datetime(1969, 7, 20,
                                    20, 17, 40) #datetime.datetime(1978, 7, 20, 20, 17, 40)
moon_time = calendar.timegm(moon_datetime_a.utctimetuple()) #269813860
moon_datetime_b = datetime.datetime.utcfromtimestamp(moon_time) #datetime.datetime(1978, 7, 20, 20, 17, 40)
moon_datetime_a.isoformat() #datetime.datetime(1978, 7, 20, 20, 17, 40)
moon_datetime_b.isoformat() #datetime.datetime(1978, 7, 20, 20, 17, 40)
time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(moon_time)) #'1978-07-20T20:17:40'

calendar

datatime

dateutil

mxDateTime

5.2.7 算法與組合數據類型

bisect

heapq

collections

array

weakref

5.2.8 文件格式、編碼與數據持久性

base64 --> RFC 3548

quopri --> quoted-printable

uu --> uuencoded

xdrlib

bz2 --> .bz2

gzip --> .gz

tarfile --> .tar | .tar.gz | .tar.bz2

zipfile --> .zip

aifc --> AIFF

wave --> .wav

audioop

sndhdr

configparser

pickle

shelve

DBM

5.2.9 文件、目錄與進程處理

Shutil

tempfile --> 臨時文件與目錄

filecmp --> 文件目錄的比較

subprocess | multiprocessing

os --> 對操做系統功能的訪問接口

date_from_name = {}
path = "."
for name in os.listdir(path):
    fullname = os.path.join(path, name)
    if os.path.isfile(fullname):
        date_from_name[fullname] = os.path.getmtime(fullname)
date_from_name
import os, collections

data = collections.defaultdict(list)
path = "C:/Py"  #or "C:\\Py"
for root, dirs, files in os.walk(path):
    for filename in files:
        fullname = os.path.join(root, filename)
        key = (os.path.getsize(fullname), filename)
        data[key].append(fullname)


for key, value in data.items():

    print(key, value)

5.2.10 網絡與Internet程序設計

socket --> 大多數基本的網絡功能

http.cookies, http.cookiejar --> 管理cookies

http.client --> HTTP請求

urllib

html.parser --> 分析HTML XHTML

urllib.parse --> URL

urllib.robotparser --> robots.txt

json --> JSON

xmlrpc.client, xmlrpc.server --> XML-RPC

ftplib --> FTP

nntplib --> NNTP

telnetlib --> TELNET

smtpd --> SMTP

smtplib --> SMTP

imaplib --> IMAP4

poplib --> POP3

mailbox --> Mailboxes

email

Django

Turbogears

Zope

5.2.11 XML

xml.dom --> DOM

xml.dom.minidom --> DOM

xml.sax --> SAX

xml.etree.ElementTree

相關文章
相關標籤/搜索