介紹:

2016年12月27日
目錄:
子產品介紹
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&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 <= n <= 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>></code><code>'nt'</code><code>; Linux</code><code>-</code><code>></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 =>儲存至目前路徑
如:/Users/wupeiqi/www =>儲存至/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子產品
實作不同語言或程式直接進行資料交換 <>
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,如需轉載請自行聯系原作者