天天看點

Python--day5--常用子產品

介紹:

Python--day5--常用子產品

2016年12月27日 

Python--day5--常用子產品

目錄:

子產品介紹

json & pickle

time  &   datetime子產品 &月曆

random子產品

OS

SYS

shutil

shelves

xml

yaml

ConfigParser

hashlib

subprocess

logging

子產品

就是用一堆代碼實作某個功能的代碼集合。

子產品分三種:

自定義子產品

内置标準子產品(标準庫)

開源子產品

開源子產品網站   :  pypi.python.org

調用子產品

<a href="http://s2.51cto.com/wyfs02/M01/8C/1E/wKiom1hiSy6xs-UQAAAcrW_IfWM018.png" target="_blank"></a>

調用

from backend.logic   import handle  ##這樣導入目錄必須是包的狀态,也就是包下面 有一個 __init__.py

handle.home()

sql.py

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

<code>import</code> <code>sys</code>

<code>import</code>  <code>os.path</code>

<code>base_dir</code><code>=</code><code>os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) </code><code>##獲得目錄</code>

<code>sys.path.append(base_dir)  </code><code>##修改庫的目錄</code>

<code>from</code>  <code>config    </code><code>import</code> <code>settings</code>

<code>def</code>  <code>db_auth(configs):</code>

<code>    </code><code>if</code>  <code>configs.DATABASE[</code><code>"user"</code><code>]  </code><code>=</code><code>=</code>  <code>'root'</code>  <code>and</code>  <code>configs.DATABASE[</code><code>"password"</code><code>] </code><code>=</code><code>=</code> <code>"123"</code><code>:</code>

<code>        </code><code>print</code><code>(</code><code>"OK"</code><code>)</code>

<code>        </code><code>return</code> <code>True</code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>print</code><code>(</code><code>"error"</code><code>)</code>

<code>def</code> <code>s(table,column):</code>

<code>    </code><code>if</code>  <code>db_auth(settings):</code>

<code>        </code><code>if</code> <code>table </code><code>=</code><code>=</code> <code>'user'</code><code>:</code>

<code>            </code><code>user_info </code><code>=</code> <code>{</code>

<code>                </code><code>"001"</code><code>:[</code><code>'hequan'</code><code>,</code><code>24</code><code>,</code><code>'engineer'</code><code>],</code>

<code>                </code><code>"002"</code><code>:[</code><code>'he123'</code><code>, </code><code>44</code><code>, </code><code>'beijing'</code><code>],</code>

<code>                </code><code>"003"</code><code>:[</code><code>'he456'</code><code>, </code><code>55</code><code>, </code><code>'hebei'</code><code>],</code>

<code>        </code><code>}</code>

<code>            </code><code>return</code>  <code>user_info</code>

<code>        </code><code>print</code><code>(</code><code>"cuowu......."</code><code>)</code>

handle.py

<code>base_dir</code><code>=</code><code>os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))</code>

<code>sys.path.append(base_dir)</code>

<code>from</code> <code>back.db.sql  </code><code>import</code> <code>s</code>

<code>def</code>  <code>home():</code>

<code>    </code><code>print</code><code>(</code><code>"welcome to home page"</code><code>)</code>

<code>    </code><code>q_data </code><code>=</code> <code>s(</code><code>"user"</code><code>,</code><code>'xxx'</code><code>)</code>

<code>    </code><code>print</code><code>(</code><code>"query res: {}"</code><code>.</code><code>format</code><code>(q_data))</code>

<code>def</code> <code>movie():</code>

<code>    </code><code>print</code><code>(</code><code>"welcome to movie page"</code><code>)</code>

<code>def</code>  <code>tv():</code>

<code>    </code><code>print</code><code>(</code><code>"welcome to tv  page"</code><code>)</code>

settings.py

<code>DATABASE </code><code>=</code><code>{</code>

<code>    </code><code>"engine"</code><code>:</code><code>"mysql"</code><code>,</code>

<code>    </code><code>"host"</code><code>:</code><code>"localhost"</code><code>,</code>

<code>    </code><code>"port"</code><code>:</code><code>3306</code><code>,</code>

<code>    </code><code>"user"</code><code>:</code><code>"root"</code><code>,</code>

<code>    </code><code>"password"</code><code>:</code><code>"123"</code><code>,</code>

<code>}</code>

user_main.py

<code>from</code> <code>back.logic  </code><code>import</code> <code>handle</code>

<code>handle.home()</code>

<code>結果</code>

<code>welcome to home page</code>

<code>OK</code>

<code>query res: {</code><code>'003'</code><code>: [</code><code>'he456'</code><code>, </code><code>55</code><code>, </code><code>'hebei'</code><code>], </code><code>'001'</code><code>: [</code><code>'hequan'</code><code>, </code><code>24</code><code>, </code><code>'engineer'</code><code>], </code><code>'002'</code><code>: [</code><code>'he123'</code><code>, </code><code>44</code><code>, </code><code>'beijing'</code><code>]}</code>

json&amp;pickle  序列化

json     用于字元串和python資料類型間進行轉化                           r   w

pickle  用于python特有的類型和python的資料類型間進行轉換      rb  wb   支援更複雜的調用函數

都提供了4個功能:  dumps\dump\loads\load

例子

<code>pickle寫入</code>

<code>import</code>  <code>pickle</code>

<code>f </code><code>=</code><code>open</code><code>(</code><code>"user.txt"</code><code>,</code><code>"wb"</code><code>)    </code><code>##json  隻是w</code>

<code>info</code><code>=</code><code>{</code>

<code>    </code><code>"user"</code><code>:</code><code>"123"</code><code>,</code>

<code>    </code><code>"hequan"</code><code>:</code><code>'123'</code>

<code>f.write(pickle.dumps(info))</code>

<code>f.close()</code>

<code>讀取</code>

<code>import</code> <code>pickle</code>

<code>f</code><code>=</code> <code>open</code><code>(</code><code>"user.txt"</code><code>,</code><code>'rb'</code><code>)  </code>

<code>data </code><code>=</code><code>pickle.loads(f.read())</code>

<code>print</code><code>(data)</code>

<code>dumps 與 dump的 差別</code>

<code>pickle.dump(info,f)    </code><code>##寫入</code>

<code>data </code><code>=</code><code>pickle.load(f)   </code><code>##讀取</code>

time

import   time

時間元祖

序号

字段

4位數年    tm_year

2008

月        tm_mon

1 到 12

日         tm_day

1到31

小時      tm_hour

0到23

分鐘    tm_min

0到59

秒     tm_sec

0到61 (60或61 是閏秒)

一周的第幾日     tm_wday

0到6 (0是周一)

一年的第幾日      tm_yday

1到366 (儒略曆)

夏令時     tm_isdst

-1, 0, 1, -1是決定是否為夏令時的旗幟

擷取目前時間

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

<code>import</code>  <code>time</code>

<code>localtime </code><code>=</code> <code>time.localtime(time.time())</code>

<code>print</code><code>(localtime)</code>

<code>time.struct_time(tm_year</code><code>=</code><code>2016</code><code>, tm_mon</code><code>=</code><code>12</code><code>, tm_mday</code><code>=</code><code>27</code><code>, tm_hour</code><code>=</code><code>16</code><code>, tm_min</code><code>=</code><code>46</code><code>, tm_sec</code><code>=</code><code>44</code><code>, tm_wday</code><code>=</code><code>1</code><code>, tm_yday</code><code>=</code><code>362</code><code>, tm_isdst</code><code>=</code><code>0</code><code>)</code>

<code>擷取格式化時間</code>

<code>localtime </code><code>=</code> <code>time.asctime(time.localtime(time.time()))</code>

<code>Tue Dec </code><code>27</code> <code>16</code><code>:</code><code>47</code><code>:</code><code>56</code> <code>2016</code>

<code>格式化日期</code>

<code>print</code><code>(time.strftime(</code><code>"%Y-%m-%d  %H:%M:%S"</code><code>,time.localtime()))</code>

<code>2016</code><code>-</code><code>12</code><code>-</code><code>27</code>  <code>16</code><code>:</code><code>49</code><code>:</code><code>16</code>

<code>月曆</code>

<code>import</code> <code>calendar</code>

<code>cat </code><code>=</code> <code>calendar.month(</code><code>2017</code><code>,</code><code>1</code><code>)</code>

<code>print</code><code>(cat)</code>

<code>    </code><code>January </code><code>2017</code>

<code>Mo Tu We Th Fr Sa Su</code>

<code>                   </code><code>1</code>

<code> </code><code>2</code>  <code>3</code>  <code>4</code>  <code>5</code>  <code>6</code>  <code>7</code>  <code>8</code>

<code> </code><code>9</code> <code>10</code> <code>11</code> <code>12</code> <code>13</code> <code>14</code> <code>15</code>

<code>16</code> <code>17</code> <code>18</code> <code>19</code> <code>20</code> <code>21</code> <code>22</code>

<code>23</code> <code>24</code> <code>25</code> <code>26</code> <code>27</code> <code>28</code> <code>29</code>

<code>30</code> <code>31</code>

<code>datetime</code>

<code>import</code> <code>datetime</code>

<code>date </code><code>=</code> <code>datetime.datetime.now()</code>

<code>print</code><code>(date)</code>

<code>2016</code><code>-</code><code>12</code><code>-</code><code>27</code> <code>16</code><code>:</code><code>54</code><code>:</code><code>42.472913</code>

随機數

random.randint(a, b),                           用于生成一個指定範圍内的整數。其中參數a是下限,參數b是上限,生成的随機數n: a &lt;= n &lt;= b

random.randrange([start], stop[, step])  從指定範圍内,按指定基數遞增的集合中 擷取一個随機數。如:random.randrange(10, 100, 2),結果相當于從[10, 12, 14, 16, ... 96, 98]序列中擷取一個随機數。

os子產品

os.popen("dir").read()     執行指令,暫時儲存到一個地方

<code>os.getcwd() 擷取目前工作目錄,即目前python腳本工作的目錄路徑</code>

<code>os.chdir(</code><code>"dirname"</code><code>)  改變目前腳本工作目錄;相當于shell下cd</code>

<code>os.curdir  傳回目前目錄: (</code><code>'.'</code><code>)</code>

<code>os.pardir  擷取目前目錄的父目錄字元串名:(</code><code>'..'</code><code>)</code>

<code>os.makedirs(</code><code>'dirname1/dirname2'</code><code>)    可生成多層遞歸目錄</code>

<code>os.removedirs(</code><code>'dirname1'</code><code>)    若目錄為空,則删除,并遞歸到上一級目錄,如若也為空,則删除,依此類推</code>

<code>os.mkdir(</code><code>'dirname'</code><code>)    生成單級目錄;相當于shell中mkdir dirname</code>

<code>os.rmdir(</code><code>'dirname'</code><code>)    删除單級空目錄,若目錄不為空則無法删除,報錯;相當于shell中rmdir dirname</code>

<code>os.listdir(</code><code>'dirname'</code><code>)    列出指定目錄下的所有檔案和子目錄,包括隐藏檔案,并以清單方式列印</code>

<code>os.remove()  删除一個檔案</code>

<code>os.rename(</code><code>"oldname"</code><code>,</code><code>"newname"</code><code>)  重命名檔案</code><code>/</code><code>目錄</code>

<code>os.stat(</code><code>'path/filename'</code><code>)  擷取檔案</code><code>/</code><code>目錄資訊</code>

<code>os.sep    輸出作業系統特定的路徑分隔符,win下為</code><code>"\\",Linux下為"</code><code>/</code><code>"</code>

<code>os.linesep    輸出目前平台使用的行終止符,win下為</code><code>"\t\n"</code><code>,Linux下為</code><code>"\n"</code>

<code>os.pathsep    輸出用于分割檔案路徑的字元串</code>

<code>os.name    輸出字元串訓示目前使用平台。win</code><code>-</code><code>&gt;</code><code>'nt'</code><code>; Linux</code><code>-</code><code>&gt;</code><code>'posix'</code>

<code>os.system(</code><code>"bash command"</code><code>)  運作shell指令,直接顯示</code>

<code>os.environ  擷取系統環境變量</code>

<code>os.path.abspath(path)  傳回path規範化的絕對路徑</code>

<code>os.path.split(path)  将path分割成目錄和檔案名二進制組傳回</code>

<code>os.path.dirname(path)  傳回path的目錄。其實就是os.path.split(path)的第一個元素</code>

<code>os.path.basename(path)  傳回path最後的檔案名。如何path以/或\結尾,那麼就會傳回空值。即os.path.split(path)的第二個元素</code>

<code>os.path.exists(path)  如果path存在,傳回</code><code>True</code><code>;如果path不存在,傳回</code><code>False</code>

<code>os.path.isabs(path)  如果path是絕對路徑,傳回</code><code>True</code>

<code>os.path.isfile(path)  如果path是一個存在的檔案,傳回</code><code>True</code><code>。否則傳回</code><code>False</code>

<code>os.path.isdir(path)  如果path是一個存在的目錄,則傳回</code><code>True</code><code>。否則傳回</code><code>False</code>

<code>os.path.join(path1[, path2[, ...]])  将多個路徑組合後傳回,第一個絕對路徑之前的參數将被忽略</code>

<code>os.path.getatime(path)  傳回path所指向的檔案或者目錄的最後存取時間</code>

<code>os.path.getmtime(path)  傳回path所指向的檔案或者目錄的最後修改時間</code>

SYS子產品

<code>sys.argv           指令行參數</code><code>List</code><code>,第一個元素是程式本身路徑</code>

<code>sys.exit(n)        退出程式,正常退出時exit(</code><code>0</code><code>)</code>

<code>sys.version        擷取Python解釋程式的版本資訊</code>

<code>sys.maxint         最大的</code><code>Int</code><code>值</code>

<code>sys.path           傳回子產品的搜尋路徑,初始化時使用PYTHONPATH環境變量的值</code>

<code>sys.platform       傳回作業系統平台名稱</code>

<code>sys.stdout.write(</code><code>'please:'</code><code>)</code>

<code>val </code><code>=</code> <code>sys.stdin.readline()[:</code><code>-</code><code>1</code><code>]</code>

shutil 檔案  檔案夾 處理子產品

shutil.copyfileobj(fsrc, fdst[, length])

将檔案内容拷貝到另一個檔案中,可以部分内容

def copyfileobj(fsrc, fdst, length=16*1024):

    """copy data from file-like object fsrc to file-like object fdst"""

    while 1:

        buf = fsrc.read(length)

        if not buf:

            break

        fdst.write(buf)

shutil.copyfile(src, dst)

拷貝檔案

shutil.copymode(src, dst)

僅拷貝權限。内容、組、使用者均不變

shutil.copystat(src, dst)

拷貝狀态的資訊,包括:mode bits, atime, mtime, flags

shutil.copy(src, dst)

拷貝檔案和權限

shutil.copy2(src, dst)

拷貝檔案和狀态資訊

shutil.ignore_patterns(*patterns)

shutil.copytree(src, dst, symlinks=False, ignore=None)

遞歸的去拷貝檔案

例如:copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

shutil.rmtree(path[, ignore_errors[, onerror]])

遞歸的去删除檔案

shutil.move(src, dst)

遞歸的去移動檔案

shutil.make_archive(base_name, format,...)

建立壓縮包并傳回檔案路徑,例如:zip、tar

base_name: 壓縮包的檔案名,也可以是壓縮包的路徑。隻是檔案名時,則儲存至目前目錄,否則儲存至指定路徑,

如:www                        =&gt;儲存至目前路徑

如:/Users/wupeiqi/www =&gt;儲存至/Users/wupeiqi/

format: 壓縮包種類,“zip”, “tar”, “bztar”,“gztar”

root_dir: 要壓縮的檔案夾路徑(預設目前目錄)

owner: 使用者,預設目前使用者

group: 組,預設目前組

logger: 用于記錄日志,通常是logging.Logger對象

shutil 對壓縮包的處理是調用 ZipFile 和 TarFile 兩個子產品來進行的

shelve

是一個簡單的k,v 将記憶體資料通過檔案持久化的子產品,支援pickle

import shelve

d = shelve.open('shelve_test') #打開一個檔案

class Test(object):

    def __init__(self,n):

        self.n = n

t = Test(123)

t2 = Test(123334)

name = ["alex","rain","test"]

d["test"] = name #持久化清單

d["t1"] = t      #持久化類

d["t2"] = t2

d.close()

xml子產品

實作不同語言或程式直接進行資料交換   &lt;&gt;

http://pyyaml.org/wiki/PyYAMLDocumentation 

configparser子產品

用于生成和修改常見配置文檔。

<code>#!/usr/bin/env python</code>

<code># -*- coding: utf-8 -*-</code>

<code>import</code> <code>configparser</code>

<code>config </code><code>=</code> <code>configparser.ConfigParser()</code>

<code>config[</code><code>"DEFAULT"</code><code>] </code><code>=</code> <code>{</code><code>'ServerAliveInterval'</code><code>: </code><code>'45'</code><code>,</code>

<code>                      </code><code>'Compression'</code><code>: </code><code>'yes'</code><code>,</code>

<code>                     </code><code>'CompressionLevel'</code><code>: </code><code>'9'</code><code>}</code>

<code>config[</code><code>'bitbucket.org'</code><code>] </code><code>=</code> <code>{}</code>

<code>config[</code><code>'bitbucket.org'</code><code>][</code><code>'User'</code><code>] </code><code>=</code> <code>'hg'</code>

<code>config[</code><code>'topsecret.server.com'</code><code>] </code><code>=</code> <code>{}</code>

<code>topsecret </code><code>=</code> <code>config[</code><code>'topsecret.server.com'</code><code>]</code>

<code>topsecret[</code><code>'Host Port'</code><code>] </code><code>=</code> <code>'50022'</code>     <code># mutates the parser</code>

<code>topsecret[</code><code>'ForwardX11'</code><code>] </code><code>=</code> <code>'no'</code>  <code># same here</code>

<code>config[</code><code>'DEFAULT'</code><code>][</code><code>'ForwardX11'</code><code>] </code><code>=</code> <code>'yes'</code>

<code>with </code><code>open</code><code>(</code><code>'example.ini'</code><code>, </code><code>'w'</code><code>) as configfile:</code>

<code>   </code><code>config.write(configfile)</code>

<code>[DEFAULT]</code>

<code>serveraliveinterval </code><code>=</code> <code>45</code>

<code>compression </code><code>=</code> <code>yes</code>

<code>compressionlevel </code><code>=</code> <code>9</code>

<code>forwardx11 </code><code>=</code> <code>yes</code>

<code>[bitbucket.org]</code>

<code>user </code><code>=</code> <code>hg</code>

<code>[topsecret.server.com]</code>

<code>host port </code><code>=</code> <code>50022</code>

<code>forwardx11 </code><code>=</code> <code>no</code>

hashlib子產品

加密操作 

subprocess子產品

提供了标準的日志接口。

分5個級别

debug() info()  warning()  error()  critical()

<code>import</code> <code>logging</code>

<code> </code> 

<code>logging.warning(</code><code>"user [alex] attempted wrong password more than 3 times"</code><code>)</code>

<code>logging.critical(</code><code>"server is down"</code><code>)</code>

<code>#輸出</code>

<code>WARNING:root:user [alex] attempted wrong password more than </code><code>3</code> <code>times</code>

<code>CRITICAL:root:server </code><code>is</code> <code>down</code>

<code>logging.basicConfig(filename</code><code>=</code><code>'example.log'</code><code>,level</code><code>=</code><code>logging.INFO)</code>

<code>logging.debug(</code><code>'This message should go to the log file'</code><code>)</code>

<code>logging.info(</code><code>'So should this'</code><code>)</code>

<code>logging.warning(</code><code>'And this, too'</code><code>)</code>

<code></code>

本文轉自 295631788 51CTO部落格,原文連結:http://blog.51cto.com/hequan/1886646,如需轉載請自行聯系原作者