15_Python常用模塊一_全棧開發(fā)學(xué)習(xí)筆記

1. collections模塊

在內(nèi)置數(shù)據(jù)類型(dict、list辛燥、set、tuple)的基礎(chǔ)上缝其,collections模塊還提供了幾個額外的數(shù)據(jù)類型:Counter挎塌、deque、defaultdict内边、namedtuple和OrderedDict等榴都。

1.1 namedtuple

namedtuple: 生成可以使用名字來訪問元素內(nèi)容的tuple


范例1:
我們知道tuple可以表示不變集合,例如漠其,一個點的二維坐標(biāo)就可以表示成:

p = (1, 2)

但是嘴高,看到(1, 2)竿音,很難看出這個tuple是用來表示一個坐標(biāo)的。
這時拴驮,namedtuple就派上了用場:

from collections import namedtuple
Point = namedtuple('point',['x','y','z'])
p1 = Point(1,2,3)
p2 = Point(3,2,1)
print(p1.x)
print(p1.y)
print(p1,p2)

執(zhí)行結(jié)果:

1
2
point(x=1, y=2, z=3) point(x=3, y=2, z=1)


范例2:
花色和數(shù)字

from collections import namedtuple
Card = namedtuple('card',['suits','number'])
c1 = Card('紅桃',2)
print(c1)
print(c1.number)
print(c1.suits)

執(zhí)行結(jié)果:

card(suits='紅桃', number=2)
2
紅桃


1.2 deque

deque: 雙端隊列春瞬,可以快速的從另外一側(cè)追加和推出對象
范例1:隊列(隊列的含義為先進(jìn)先出,英文表示為FIFO)

import queue
q = queue.Queue()
q.put(10)
q.put(5)
q.put(6)
print(q.get())
print(q.get())
print(q.get())
print(q.get())   # 阻塞

執(zhí)行結(jié)果:

10
5
6


范例2:隊列2

q = queue.Queue()
q.put([1,2,3])
q.put(5)
q.put(6)
print(q)
print(q.get())
print(q.qsize())

執(zhí)行結(jié)果:

<queue.Queue object at 0x000000000320C4A8>
[1, 2, 3]
2


范例3:雙端隊列(不推薦使用)

from collections import deque
dq = deque([1,2])
dq.append('a')   # 從后面放數(shù)據(jù)  [1,2,'a']
dq.appendleft('b') # 從前面放數(shù)據(jù) ['b',1,2,'a']
dq.insert(2,3)    #['b',1,3,2,'a']    # 辦公電腦沒有insert
print(dq.pop())      # 從后面取數(shù)據(jù)
print(dq.pop())      # 從后面取數(shù)據(jù)
print(dq.popleft())  # 從前面取數(shù)據(jù)
print(dq)

執(zhí)行結(jié)果:

a
2
b
deque([1, 3])


1.3 OrderedDict

OrderedDict: 有序字典
使用dict時套啤,Key是無序的宽气。在對dict做迭代時,我們無法確定Key的順序潜沦。
如果要保持Key的順序萄涯,可以用OrderedDict:

from collections import  OrderedDict
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od) # OrderedDict的Key是有序的
print(od['a'])
for k in od:
    print(k)

執(zhí)行結(jié)果:

OrderedDict([('a', 1), ('b', 2), ('c', 3)])
1
a
b
c


1.4 defaultdict

defaultdict: 帶有默認(rèn)值的字典
范例1:
有如下值集合 [11,22,33,44,55,66,77,88,99,90...],將所有大于 66 的值保存至字典的第一個key中唆鸡,將小于 66 的值保存至第二個key的值中涝影。

即: {'k1': 大于66 , 'k2': 小于66}

from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)
print(my_dict)

執(zhí)行結(jié)果:

defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99, 90]})


范例2:
使用dict時,如果引用的Key不存在争占,就會拋出KeyError燃逻。如果希望key不存在時,返回一個默認(rèn)值臂痕,就可以用defaultdict:

from collections import defaultdict
d = defaultdict(lambda : None)
print(d['k'])

執(zhí)行結(jié)果:

None


1.5 Counter

Counter: 計數(shù)器唆樊,主要用來計數(shù)
Counter類的目的是用來跟蹤值出現(xiàn)的次數(shù)。它是一個無序的容器類型刻蟹,以字典的鍵值對形式存儲逗旁,其中元素作為key,其計數(shù)作為value舆瘪。計數(shù)值可以是任意的Interger(包括0和負(fù)數(shù))片效。Counter類和其他語言的bags或multisets很相似。
范例:

from collections import Counter
c = Counter('abcdeabcdabcaba')
print(c)
#輸出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

執(zhí)行結(jié)果:

Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1})

2. 時間模塊

2.1 表示時間的三種方式

1)時間戳(timestamp) :通常來說,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。我們運行“type(time.time())”昧港,返回的是float類型。
范例:

import time
print(time.time())

執(zhí)行結(jié)果:

1548745700.744755


2)格式化的時間字符串(Format String): ‘1999-12-06’
范例:

import time
print(time.strftime("%Y-%m-%d %a %H:%M:%S"))  #year month day HOUR MINUTE SECOND
print(time.strftime("%Y/%m/%d %H:%M:%S"))  #year month day HOUR MINUTE SECOND
print(time.strftime("%m-%d %H:%M:%S"))  #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M:%S"))  #year month day HOUR MINUTE SECOND
print(time.strftime("%H:%M"))  #year month day HOUR MINUTE SECOND

執(zhí)行結(jié)果:

2019-01-29 Tue 15:23:39
2019/01/29 15:23:39
01-29 15:23:39
15:23:39
15:23


3)元組(struct_time) :struct_time元組共有9個元素共九個元素:(年膨桥,月,日唠叛,時只嚣,分,秒艺沼,一年中第幾周册舞,一年中第幾天等)

import time
struct_time = time.localtime()
print(struct_time)
print(struct_time.tm_year)

執(zhí)行結(jié)果:

time.struct_time(tm_year=2019, tm_mon=1, tm_mday=29, tm_hour=15, tm_min=26, tm_sec=47, tm_wday=1, tm_yday=29, tm_isdst=0)
2019


2.2 三種時間表達(dá)方式的用途

格式化時間 —— 字符串: 給人看的
時間戳?xí)r間 —— float時間 : 計算機看的
結(jié)構(gòu)化時間 —— 元祖 :計算用的


2.3 時間戳和結(jié)構(gòu)化時間

范例1:

t = time.time()
print(time.localtime(t))    # 結(jié)構(gòu)化時間
print(time.gmtime(t))

執(zhí)行結(jié)果:

time.struct_time(tm_year=2019, tm_mon=1, tm_mday=29, tm_hour=16, tm_min=36, tm_sec=11, tm_wday=1, tm_yday=29, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=29, tm_hour=8, tm_min=36, tm_sec=11, tm_wday=1, tm_yday=29, tm_isdst=0)


范例2:

t = time.time()
print(t)
print(time.localtime(1500000000))
print(time.gmtime(t))

執(zhí)行結(jié)果:

1548751146.404482
time.struct_time(tm_year=2017, tm_mon=7, tm_mday=14, tm_hour=10, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=195, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=1, tm_mday=29, tm_hour=8, tm_min=39, tm_sec=6, tm_wday=1, tm_yday=29, tm_isdst=0)


范例3:
mktime:結(jié)構(gòu)化時間轉(zhuǎn)換成時間戳?xí)r間

print(time.mktime(time.localtime()))

執(zhí)行結(jié)果:

1548751428.0


范例4:
struct_time:格式化時間轉(zhuǎn)換成結(jié)構(gòu)化時間

print(time.strptime('2000-12.31','%Y-%m.%d'))

執(zhí)行結(jié)果:

time.struct_time(tm_year=2000, tm_mon=12, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=366, tm_isdst=-1)


范例5:
結(jié)構(gòu)化時間轉(zhuǎn)換成格式化時間

print(time.strftime('%m/%d/%Y %H:%M:%S', time.localtime(3000000000)))

執(zhí)行結(jié)果:

01/24/2065 13:20:00


范例6:

print(time.asctime())

執(zhí)行結(jié)果:

Tue Jan 29 17:05:24 2019

3. random模塊

網(wǎng)站例子:

>>> import random
#隨機小數(shù)
>>> random.random()      # 大于0且小于1之間的小數(shù)
0.7664338663654585
>>> random.uniform(1,3) #大于1小于3的小數(shù)
1.6270147180533838
#恒富:發(fā)紅包

#隨機整數(shù)
>>> random.randint(1,5)  # 大于等于1且小于等于5之間的整數(shù)
>>> random.randrange(1,10,2) # 大于等于1且小于10之間的奇數(shù)


#隨機選擇一個返回
>>> random.choice([1,'23',[4,5]])  # #1或者23或者[4,5]
#隨機選擇多個返回,返回的個數(shù)為函數(shù)的第二個參數(shù)
>>> random.sample([1,'23',[4,5]],2) # #列表元素任意2個組合
[[4, 5], '23']


#打亂列表順序
>>> item=[1,3,5,7,9]
>>> random.shuffle(item) # 打亂次序
>>> item
[5, 1, 3, 7, 9]
>>> random.shuffle(item)
>>> item
[5, 9, 7, 1, 3]

3.1 練習(xí):生成隨機驗證碼

思路:

 # 1234   432145
# Abc123 a17698

# 0-9
# chr
# [65-90] 數(shù)字
# 字母 = chr(數(shù)字)
# 隨機數(shù)字
# 隨機選一個 [隨機數(shù)字障般,隨機字母]


import random

def v_code():

    code = ''
    for i in range(5):

        num=random.randint(0,9)
        alf=chr(random.randint(65,90))
        add=random.choice([num,alf])
        code="".join([code,str(add)])

    return code

print(v_code())

執(zhí)行結(jié)果:

6K26C

4. os模塊

4.1 os.getcwd()

os.getcwd() 獲取當(dāng)前工作目錄调鲸,即當(dāng)前python腳本工作的目錄路徑
范例:

import os
print(os.getcwd())

執(zhí)行結(jié)果:

E:\python_project\muggle


4.2 os.chdir("dirname")

os.chdir("dirname") 改變當(dāng)前腳本工作目錄盛杰;相當(dāng)于shell下cd

import os
print(os.getcwd())
os.chdir(r'E:\python_project')
print(os.getcwd())
os.chdir('..')    # 直接返回上一級目錄
print(os.getcwd())

執(zhí)行結(jié)果:

E:\python_project\muggle
E:\python_project
E:\


4.3 os.makedirs() 與 os.removedirs()

os.makedirs('dirname1/dirname2') 可生成多層遞歸目錄
os.removedirs('dirname1') 若目錄為空,則刪除藐石,并遞歸到上一級目錄即供,如若也為空,則刪除于微,依此類推
范例:

import os
os.makedirs('dirname1/dirname2')
os.removedirs('dirname1/dirname2')


4.4 os.mkdir() 與 os.rmdir()

os.mkdir('dirname') 生成單級目錄逗嫡;相當(dāng)于shell中mkdir dirname
os.rmdir('dirname') 刪除單級空目錄,若目錄不為空則無法刪除角雷,報錯;相當(dāng)于shell中rmdir dirname
范例:

import os
os.mkdir('dirname')
os.rmdir('dirname')


4.5 os.listdir()

os.listdir('dirname') 列出指定目錄下的所有文件和子目錄性穿,包括隱藏文件勺三,并以列表方式打印
范例:

import os
print(os.listdir(r'E:\python_project\muggle'))

執(zhí)行結(jié)果:

['.idea', '1.復(fù)習(xí).py', 'file', 'move_info7', 'muggle_test.py', 'venv']


4.6 os.stat('')

os.stat('path/filename') 獲取文件/目錄信息
范例:

import os
print(os.stat('1.復(fù)習(xí).py'))

執(zhí)行結(jié)果:

os.stat_result(st_mode=33206, st_ino=16325548649219716, st_dev=3189114841, st_nlink=1, st_uid=0, st_gid=0, st_size=1072, st_atime=1547383023, st_mtime=1547348253, st_ctime=1547383023)


4.7 os.sep

os.sep 輸出操作系統(tǒng)特定的路徑分隔符,win下為"\",Linux下為"/"
范例:

import os
print(os.sep)  # python代碼跨平臺 :linux windows

執(zhí)行結(jié)果:

\


4.8 os.system()

os.system("bash command") 運行shell命令需曾,直接顯示
范例:

import os
os.system("dir")

執(zhí)行結(jié)果:

 ?????? E ?е????б????
 ??????к??? BE16-07D9

 E:\python_project\muggle ????

2019/01/29  23:01    <DIR>          .
2019/01/29  23:01    <DIR>          ..
2019/01/29  22:52    <DIR>          .idea
2019/01/13  10:57             1,072 1.???.py
2019/01/06  14:15                70 file
2019/01/27  10:55            22,655 move_info7
2019/01/29  23:01                54 muggle_test.py
2019/01/06  14:09    <DIR>          venv
               4 ?????         23,851 ???
               4 ???? 480,761,966,592 ???????


4.9 os.popen("bash command).read()

os.popen("bash command).read() 運行shell命令吗坚,獲取執(zhí)行結(jié)果
范例:

import os
ret = os.popen("dir").read()
print(ret)

執(zhí)行結(jié)果:

 驅(qū)動器 E 中的卷沒有標(biāo)簽。
 卷的序列號是 BE16-07D9

 E:\python_project\muggle 的目錄

2019/01/29  23:06    <DIR>          .
2019/01/29  23:06    <DIR>          ..
2019/01/29  23:01    <DIR>          .idea
2019/01/13  10:57             1,072 1.復(fù)習(xí).py
2019/01/06  14:15                70 file
2019/01/27  10:55            22,655 move_info7
2019/01/29  23:06                78 muggle_test.py
2019/01/06  14:09    <DIR>          venv
               4 個文件         23,875 字節(jié)
               4 個目錄 480,761,966,592 可用字節(jié)


4.10 os.environ

os.environ 獲取系統(tǒng)環(huán)境變量
范例:

import os
print(os.environ)

執(zhí)行結(jié)果:

environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\rock\\AppData\\Roaming', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': 'DESKTOP-DKJ14L4', 'COMSPEC': 'C:\\WINDOWS\\system32\\cmd.exe', 'DRIVERDATA': 'C:\\Windows\\System32\\Drivers\\DriverData', 
...


4.11 os.path.split(path)

os.path.split(path) 將path分割成目錄和文件名二元組返回
范例:

import os
print(os.getcwd())
print(os.path.split(os.getcwd()))

執(zhí)行結(jié)果:

E:\python_project\muggle
('E:\\python_project', 'muggle')


4.12 os.path.join(path1[, path2[, ...]])

os.path.join(path1[, path2[, ...]]) 將多個路徑組合后返回呆万,第一個絕對路徑之前的參數(shù)將被忽略
范例:

import os
print(os.path.join(r'C:\Users\Administrator','user','local'))

執(zhí)行結(jié)果:

C:\Users\Administrator\user\local


4.13 os.path.getsize(path)

os.path.getsize(path) 返回path的大小
范例:

import os

print(os.getcwd())
print(os.path.getsize(os.getcwd()))

print(os.getcwd())
print(os.path.getsize(os.path.join(os.getcwd(),'1.復(fù)習(xí).py')))

執(zhí)行結(jié)果:

E:\python_project\muggle
4096
E:\python_project\muggle
1072

5. sys模塊

sys模塊是與python解釋器交互的一個接口

5.1 sys.exit(n)

sys.exit(n) 退出程序商源,正常退出時exit(0),錯誤退出sys.exit(1)

import sys
sys.exit(1)


5.2 sys.version 與 sys.platform

sys.version 獲取Python解釋程序的版本信息
sys.platform 返回操作系統(tǒng)平臺名稱
范例:

import sys
print(sys.platform)
print(sys.version)

執(zhí)行結(jié)果:

win32
3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]


5.3 sys.path

sys.path 返回模塊的搜索路徑,初始化時使用PYTHONPATH環(huán)境變量的值
范例:

import sys
print(sys.path)

執(zhí)行結(jié)果:

['E:\\python_project\\muggle', 'E:\\python_project\\muggle', 'E:\\python_project\\muggle\\venv\\Scripts\\python36.zip', 'D:\\Program Files\\Python\\Python36\\DLLs', 'D:\\Program Files\\Python\\Python36\\lib', 'D:\\Program Files\\Python\\Python36', 'E:\\python_project\\muggle\\venv', 'E:\\python_project\\muggle\\venv\\lib\\site-packages', 'E:\\python_project\\muggle\\venv\\lib\\site-packages\\setuptools-39.1.0-py3.6.egg', 'E:\\python_project\\muggle\\venv\\lib\\site-packages\\pip-10.0.1-py3.6.egg', 'D:\\Program Files\\JetBrains\\PyCharm 2018.1.3\\helpers\\pycharm_matplotlib_backend']


5.4 sys.argv

sys.argv 命令行參數(shù)List谋减,第一個元素是程序本身路徑
范例:

import sys
ret = sys.argv
name = ret[1]
pwd = ret[2]
if name == 'alex' and pwd == 'alex3714':
    print('登陸成功')
else:
    print("錯誤的用戶名和密碼")
    sys.exit()
print('你可以使用計算器了')

執(zhí)行結(jié)果:

(venv) E:\python_project\muggle>python muggle_test.py alex alex123
錯誤的用戶名和密碼

(venv) E:\python_project\muggle>python muggle_test.py alex alex3714
登陸成功
你可以使用計算器了

6. 前5個模塊總結(jié)

6.1 collections

'''
#defaultdict  帶有默認(rèn)值的字典

# 有如下值集合 [11,22,33,44,55,66,77,88,99,90...]牡彻,
# 將所有大于 66 的值保存至字典的第一個key中,
# 將小于 66 的值保存至第二個key的值中出爹。即: {'k1': 大于66 , 'k2': 小于66}
'''
from collections import defaultdict
values = [11, 22, 33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)
for value in  values:
    if value>66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)
        '''
##使用dict時庄吼,如果引用的Key不存在,就會拋出KeyError严就。如果希望key不存在時总寻,返回一個默認(rèn)值,就可以用defaultdict
'''
from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1']             # key1存在
dd['key2']             # key2不存在梢为,返回默認(rèn)值
print(dd['key1'])
print(dd['key2'])
'''


6.2 time

#=====================================time模塊=========================================================
##表示時間的三種方式
#(1)時間戳(timestamp)通常來說渐行,時間戳表示的是從1970年1月1日00:00:00開始按秒計算的偏移量。
# 我們運行“type(time.time())”铸董,返回的是float類型祟印。
'''import time
print(time.time())'''''
#(2)格式化的時間字符串(Format String): ‘1999-12-06’
'''
%y 兩位數(shù)的年份表示(00-99)       小寫
%Y 四位數(shù)的年份表示(000-9999)    大寫
%m 月份(01-12) 
%d 月內(nèi)中的一天(0-31)
%H 24小時制小時數(shù)(0-23)
%I 12小時制小時數(shù)(01-12)
%M 分鐘數(shù)(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應(yīng)的日期表示和時間表示
%j 年內(nèi)的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(shù)(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(shù)(00-53)星期一為星期的開始
%x 本地相應(yīng)的日期表示
%X 本地相應(yīng)的時間表示
%Z 當(dāng)前時區(qū)的名稱
%% %號本身'''
#(3) 元組  結(jié)構(gòu)化(struct_time) :struct_time元組共有9個元素共九個元素:
# (年粟害,月旁理,日,時我磁,分孽文,秒驻襟,一年中第幾周,一年中第幾天等)
'''
索引(Index)   屬性(Attribute)         值(Values)
        0           tm_year(年)              比如2011
        1           tm_mon(月)               1 - 12
        2           tm_mday(日)              1 - 31
        3           tm_hour(時)              0 - 23
        4           tm_min(分)               0 - 59
        5           tm_sec(秒)               0 - 60
        6           tm_wday(weekday)         0 - 6(0表示周一)
        7           tm_yday(一年中的第幾天)     1 - 366
        8           tm_isdst(是否是夏令時)     默認(rèn)為0
        '''

#例如
'''
import time          #導(dǎo)入時間模塊
#=====時間戳======
#print(time.time())
#=====時間字符串=====格式化時間==
#print(time.strftime('%Y-%m-%d'))          # 時間字符串年月日
#print(time.strftime('%Y-%m-%d %H:%M:%S')) # 時間字符串年月日時分秒
#=====時間元祖====結(jié)構(gòu)化時間==
t = time.localtime()
print(t)
'''
#================================================================================================================
######幾種格式之間的轉(zhuǎn)換######
'''1.時間戳 -->結(jié)構(gòu)化時間
#timestamp(時間戳)-----struct_time(結(jié)構(gòu)化時間)    用localtime或者gmtime
#time.gmtime(時間戳)    #UTC時間芋哭,與英國倫敦當(dāng)?shù)貢r間一致
#time.localtime(時間戳) #當(dāng)?shù)貢r間沉衣。例如我們現(xiàn)在在北京執(zhí)行這個方法:與UTC時間相差8小時,UTC時間+8小時 = 北京時間
'''
#例子
'''
import time
t = time.gmtime(1500000000)
t1 = time.localtime(1500000000)
'''
#=============================================================================================
'''2.結(jié)構(gòu)化時間-->時間戳
#time.mktime(結(jié)構(gòu)化時間)
# struct_time(結(jié)構(gòu)化時間)-----timestamp(時間戳)    用mktime
'''
#例子
'''
import time
time_tuple = time.localtime(1500000000)
print(time.mktime(time_tuple))
'''
#===========================================================================================
'''3.結(jié)構(gòu)化時間-----字符串時間    用strftime
#time.strftime("格式定義","結(jié)構(gòu)化時間")  結(jié)構(gòu)化時間參數(shù)若不傳减牺,則現(xiàn)實當(dāng)前時間'''
#例子
'''
import time
time.strftime("%Y-%m-%d %X")#參數(shù)若不傳豌习,則現(xiàn)實當(dāng)前時間'2018-01-10 17:09:46'
time.strftime("%Y-%m-%d",time.localtime(1500000000))
'''
#==========================================================================================
'''4.字符串時間-->結(jié)構(gòu)化時間       
time.strptime (時間字符串,字符串對應(yīng)格式)'''
#例子
'''
import time
time.strptime("2017-03-16","%Y-%m-%d")
time.strptime("07/24/2017","%m/%d/%Y")
'''

#======================轉(zhuǎn)串串=========================
#結(jié)構(gòu)化時間 --> %a %b %d %H:%M:%S %Y串
#time.asctime(結(jié)構(gòu)化時間) 如果不傳參數(shù),直接返回當(dāng)前時間的格式化串
import time
time.asctime(time.localtime(1500000000))
'Fri Jul 14 10:40:00 2017'
time.asctime()
'Mon Jul 24 15:18:33 2017'

#%a %d %d %H:%M:%S %Y串 --> 結(jié)構(gòu)化時間
#time.ctime(時間戳)  如果不傳參數(shù)拔疚,直接返回當(dāng)前時間的格式化串
time.ctime()
'Mon Jul 24 15:19:07 2017'
time.ctime(1500000000)
'Fri Jul 14 10:40:00 2017'


6.3 random

# ===========================random模塊===========================
import random
#隨機小數(shù)
random.random()        #大于0且小于1的小數(shù)
random.uniform(1,3)    #大于1小于3的小數(shù)
#隨機整數(shù)
random.randint(1,5)        # 大于等于1且小于等于5之間的整數(shù),只輸出一個隨機輸出
random.randrange(1,10,2)   # 大于等于1且小于10之間的奇數(shù),只輸出一個隨機輸出
#隨機選擇一個返回
random.choice([[1,2,3,9,[3,4]]])    #1或者2或者3或者9或者[3,4]
random.choices([1,2,3,9,[3,4]])    #[1]或者[2]或者[3]或者[9]或者[[3,4]]

#隨機選擇多個返回肥隆,返回的個數(shù)為函數(shù)的第二個參數(shù)
random.sample([1, '23', [4,5]], 2)  # #列表元素任意2個組合
                                         #[]是一個元素,2是選擇[]里的個數(shù)
#打亂列表順序   shuffle
item=[1,3,5,7,9]
random.shuffle(item)
print(item)


6.4 os

#=========================================os模塊===========================================
'''
os.getcwd() 獲取當(dāng)前工作目錄稚失,即當(dāng)前python腳本工作的目錄路徑

os.chdir("dirname")  改變當(dāng)前腳本工作目錄栋艳;相當(dāng)于shell下cd

os.curdir  返回當(dāng)前目錄: ('.')

os.pardir  獲取當(dāng)前目錄的父目錄字符串名:('..')

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

os.removedirs('dirname1')    若目錄為空,則刪除句各,并遞歸到上一級目錄吸占,如若也為空,則刪除凿宾,依此類推

os.mkdir('dirname')    生成單級目錄矾屯;相當(dāng)于shell中mkdir dirname

os.rmdir('dirname')    刪除單級空目錄,若目錄不為空則無法刪除初厚,報錯件蚕;相當(dāng)于shell中rmdir dirname

os.listdir('dirname')    列出指定目錄下的所有文件和子目錄,包括隱藏文件产禾,并以列表方式打印

os.remove()  刪除一個文件

os.rename("oldname","newname")  重命名文件/目錄

os.sep    輸出操作系統(tǒng)特定的路徑分隔符骤坐,win下為"\\",Linux下為"/"

os.linesep    輸出當(dāng)前平臺使用的行終止符,win下為"\t\n",Linux下為"\n"

os.pathsep    輸出用于分割文件路徑的字符串 win下為;,Linux下為:

os.name    輸出字符串指示當(dāng)前使用平臺下愈。win->'nt'; Linux->'posix'

os.system("bash command")  運行shell命令纽绍,直接顯示

os.popen("bash command).read()  運行shell命令,獲取執(zhí)行結(jié)果

os.environ  獲取系統(tǒng)環(huán)境變量

os.path

os.path.abspath(path) 返回path規(guī)范化的絕對路徑 os.path.split(path) 將path分割成目錄和文件名二元組返回 os.path.dirname(path) 返回path的目錄势似。其實就是os.path.split(path)的第一個元素 os.path.basename(path) 返回path最后的文件名拌夏。如何path以/或\結(jié)尾,那么就會返回空值履因。
                        即os.path.split(path)的第二個元素

os.path.exists(path)  如果path存在障簿,返回True;如果path不存在栅迄,返回False

os.path.isabs(path)  如果path是絕對路徑站故,返回True

os.path.isfile(path)  如果path是一個存在的文件,返回True。否則返回False

os.path.isdir(path)  如果path是一個存在的目錄西篓,則返回True愈腾。否則返回False

os.path.join(path1[, path2[, ...]])  將多個路徑組合后返回,第一個絕對路徑之前的參數(shù)將被忽略

os.path.getatime(path)  返回path所指向的文件或者目錄的最后訪問時間

os.path.getmtime(path)  返回path所指向的文件或者目錄的最后修改時間

os.path.getsize(path) 返回path的大小

os.stat('path/filename')  獲取文件/目錄信息
'''''
# 注意:
# os.stat('path/filename')  獲取文件/目錄信息  的結(jié)構(gòu)說明

'''stat 結(jié)構(gòu):

st_mode: inode 保護(hù)模式
st_ino: inode 節(jié)點號岂津。
st_dev: inode 駐留的設(shè)備虱黄。
st_nlink: inode 的鏈接數(shù)。
st_uid: 所有者的用戶ID吮成。
st_gid: 所有者的組ID橱乱。
st_size: 普通文件以字節(jié)為單位的大小粱甫;包含等待某些特殊文件的數(shù)據(jù)泳叠。
st_atime: 上次訪問的時間。
st_mtime: 最后一次修改的時間茶宵。
st_ctime: 由操作系統(tǒng)報告的"ctime"危纫。在某些系統(tǒng)上(如Unix)是最新的元數(shù)據(jù)更改的時間,在其它系統(tǒng)上(如Windows)是創(chuàng)建時間(詳細(xì)信息參見平臺的文檔)节预。'''


6.5 sys

#====================sys模塊========================================
'''
sys.argv           命令行參數(shù)List叶摄,第一個元素是程序本身路徑
sys.exit(n)        退出程序属韧,正常退出時exit(0),錯誤退出sys.exit(1)
sys.version        獲取Python解釋程序的版本信息
sys.path           返回模塊的搜索路徑安拟,初始化時使用PYTHONPATH環(huán)境變量的值
sys.platform       返回操作系統(tǒng)平臺名稱'''''


import sys
try:
    sys.exit(1)

except SystemExit as e:
     print(e)

6. 序列化模塊

什么叫序列化——將原本的字典、列表等內(nèi)容轉(zhuǎn)換成一個字符串的過程就叫做序列化宵喂。
序列化 —— 轉(zhuǎn)向一個字符串?dāng)?shù)據(jù)類型
序列 —— 字符串


從數(shù)據(jù)類型 --> 字符串的過程 序列化
從字符串 --> 數(shù)據(jù)類型的過程 反序列化


6.1 三個序列化模塊介紹

json *****
pickle ****
shelve ***


json # 數(shù)字 字符串 列表 字典 元組
通用的序列化格式
只有很少的一部分?jǐn)?shù)據(jù)類型能夠通過json轉(zhuǎn)化成字符串


pickle
所有的python中的數(shù)據(jù)類型都可以轉(zhuǎn)化成字符串形式
pickle序列化的內(nèi)容只有python能理解
且部分反序列化依賴python代碼


shelve
序列化句柄
使用句柄直接操作糠赦,非常方便


6.2 json

dumps:序列化方法
loads:反序列化方法

范例1:dumps 與 loads(內(nèi)存方式)

import json

dic = {"k1":"v1"}
print(type(dic),dic)

str_d = json.dumps(dic)    # 序列化
print(type(str_d),str_d)

dic_d = json.loads(str_d)    # 反序列化
print(type(dic_d),dic_d)

執(zhí)行結(jié)果:

<class 'dict'> {'k1': 'v1'}
<class 'str'> {"k1": "v1"}
<class 'dict'> {'k1': 'v1'}


范例2:元組的序列化與反序列化

import json

dic = (1,2,3,4)
print(type(dic),dic)

str_d = json.dumps(dic)    # 序列化
print(type(str_d),str_d)

dic_d = json.loads(str_d)    # 反序列化
print(type(dic_d),dic_d)

執(zhí)行結(jié)果:

<class 'tuple'> (1, 2, 3, 4)
<class 'str'> [1, 2, 3, 4]
<class 'list'> [1, 2, 3, 4]


范例3.1:dump與load(英文)
dump

import json

dic = {1:"a",2:'b'}
f = open('fff','w',encoding='utf-8')
json.dump(dic,f)
f.close()

執(zhí)行結(jié)果:

# 文件fff中的內(nèi)容
{"1": "a", "2": "b"}

load

import json

f = open('fff')
res = json.load(f)
f.close()
print(type(res),res)

執(zhí)行結(jié)果:

<class 'dict'> {'1': 'a', '2': 'b'}


范例3.2:dump與load(中文)

import json

dic = {1:"中國",2:'b'}
f = open('fff','w',encoding='utf-8')
json.dump(dic,f,ensure_ascii=False)
f.close()

f = open('fff',encoding="utf-8")
res = json.load(f)
f.close()
print(type(res),res)

執(zhí)行結(jié)果:

# 文件fff中的內(nèi)容
{"1": "中國", "2": "b"}
<class 'dict'> {'1': '中國', '2': 'b'}


范例3.3:分次寫數(shù)據(jù)

import json

l = [{'k':'111'},{'k2':'111'},{'k3':'111'}]
f = open('file','w')
import json
for dic in l:
    str_dic = json.dumps(dic)
    f.write(str_dic+'\n')
f.close()

執(zhí)行結(jié)果:

# 文件file中的內(nèi)容
{"k": "111"}
{"k2": "111"}
{"k3": "111"}
f = open('file')
import json
l = []
for line in f:
    dic = json.loads(line.strip())
    l.append(dic)
f.close()
print(l)

執(zhí)行結(jié)果:

[{'k': '111'}, {'k2': '111'}, {'k3': '111'}]


6.3 pickle

范例1:

import pickle

dic = {'k1':'v1','k2':'v2','k3':'v3'}
str_dic = pickle.dumps(dic)
print(str_dic)  #一串二進(jìn)制內(nèi)容

dic2 = pickle.loads(str_dic)
print(dic2)    #字典

執(zhí)行結(jié)果:

b'\x80\x03}q\x00(X\x02\x00\x00\x00k1q\x01X\x02\x00\x00\x00v1q\x02X\x02\x00\x00\x00k2q\x03X\x02\x00\x00\x00v2q\x04X\x02\x00\x00\x00k3q\x05X\x02\x00\x00\x00v3q\x06u.'
{'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}


范例2.1:

import pickle
import time

struct_time  = time.localtime(1000000000)
print(struct_time)
f = open('pickle_file','wb')
pickle.dump(struct_time,f)
f.close()

f = open('pickle_file','rb')
struct_time2 = pickle.load(f)
print(struct_time2.tm_year)
f.close()

執(zhí)行結(jié)果:

time.struct_time(tm_year=2001, tm_mon=9, tm_mday=9, tm_hour=9, tm_min=46, tm_sec=40, tm_wday=6, tm_yday=252, tm_isdst=0)
2001


范例2.2:分批讀

import pickle
import time

struct_time1  = time.localtime(1000000000)
struct_time2  = time.localtime(2000000000)
f = open('pickle_file','wb')
pickle.dump(struct_time1,f)
pickle.dump(struct_time2,f)
f.close()
f = open('pickle_file','rb')
struct_time1 = pickle.load(f)
struct_time2 = pickle.load(f)
print(struct_time1.tm_year)
print(struct_time2.tm_year)
f.close()

執(zhí)行結(jié)果:

2001
2033


6.4 shelve

shelve只提供給我們一個open方法,是用key來訪問的锅棕,使用起來和字典類似
范例1:

import shelve

f = shelve.open('shelve_file')
f['key'] = {'int':10, 'float':9.5, 'string':'Sample data'}  #直接對文件句柄操作拙泽,就可以存入數(shù)據(jù)
f.close()

import shelve
f1 = shelve.open('shelve_file')
existing = f1['key']  #取出數(shù)據(jù)的時候也只需要直接用key獲取即可,但是如果key不存在會報錯
f1.close()
print(existing)

執(zhí)行結(jié)果:

{'int': 10, 'float': 9.5, 'string': 'Sample data'}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末裸燎,一起剝皮案震驚了整個濱河市顾瞻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌德绿,老刑警劉巖荷荤,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異移稳,居然都是意外死亡蕴纳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門个粱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來古毛,“玉大人,你說我怎么就攤上這事都许〉巨保” “怎么了嫂冻?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颖低。 經(jīng)常有香客問我絮吵,道長,這世上最難降的妖魔是什么忱屑? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任蹬敲,我火速辦了婚禮,結(jié)果婚禮上莺戒,老公的妹妹穿的比我還像新娘伴嗡。我一直安慰自己,他們只是感情好从铲,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布瘪校。 她就那樣靜靜地躺著,像睡著了一般名段。 火紅的嫁衣襯著肌膚如雪阱扬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天伸辟,我揣著相機與錄音麻惶,去河邊找鬼。 笑死信夫,一個胖子當(dāng)著我的面吹牛窃蹋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播静稻,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼警没,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了振湾?” 一聲冷哼從身側(cè)響起杀迹,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎押搪,沒想到半個月后树酪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡嵌言,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年嗅回,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摧茴。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡绵载,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情娃豹,我是刑警寧澤焚虱,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站懂版,受9級特大地震影響鹃栽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躯畴,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一民鼓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蓬抄,春花似錦丰嘉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至阅爽,卻和暖如春路幸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背付翁。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工简肴, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胆敞。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓着帽,卻偏偏與公主長得像杂伟,于是被迫代替她去往敵國和親移层。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 常用模塊 認(rèn)識模塊 什么是模塊 什么是模塊? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件越平,文...
    go以恒閱讀 1,943評論 0 6
  • 模塊和包 一 模塊 1 什么是模塊秦叛? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件晦溪,文件名就是...
    go以恒閱讀 2,263評論 0 4
  • 序列化模塊 序列 列表 元組 字符串 bytes 什么叫序列化 把一個數(shù)據(jù)類型轉(zhuǎn)換成 字符串、byets類型的過程...
    Snackk閱讀 234評論 0 0
  • 一挣跋、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,723評論 0 10
  • 原始器型融入當(dāng)代的生命情緒;婺州窯也就重新煥發(fā)出了生命力舟肉。 婺州窯|位于今浙江金華地區(qū)修噪,在金華、蘭溪路媚、義烏黄琼、東陽、...
    谷雨CHN閱讀 430評論 6 14