12. python常用模塊

基于網(wǎng)絡(luò)課程《Python全棧開發(fā)專題》 記錄筆記,請(qǐng)支持正版課程收厨。

sys模塊

import sys

# 類似于java classpath
print(sys.path)

# 引入這個(gè)模塊
sys.path.append(r'./test')
import my
my.greet('二狗')

# 引入my.py模塊的另一種方法
# import imp
# my = imp.load_source('my', r'./test/my.py')
# my.greet('二狗')

print(sys.modules['my'])  # <module 'my' from './test\\my.py'>
print(type(sys.modules['my']))  # <class 'module'>

# 打印操作系統(tǒng)標(biāo)識(shí)
print(sys.platform)

# 獲取運(yùn)行參數(shù)围俘,其中第1個(gè)參數(shù)是腳本本身
print(sys.argv[0])   # .... src\chapter12\demo01.py

# 標(biāo)準(zhǔn)輸入輸出流
s = sys.stdin.read(6)  # 只讀取前6個(gè)字符
print(s)
sys.stdout.writelines('Hello Ketty')
sys.stderr.writelines('[Error] Something was happened.');

獲取和改變工作目錄

import os
# 獲取和改變工作目錄

print('當(dāng)前工作目錄:', os.getcwd())

# 目錄下的所有文件和子目錄
for dir in os.listdir(os.getcwd()):
    print(dir)

# 跳轉(zhuǎn)
os.chdir('../')
print('改變后的工作目錄:', os.getcwd())

print(os.cpu_count())
print(os.times())

文件與目錄操作

import os

# exists & mkdir
if not os.path.exists('newDir'):
    os.mkdir('newDir')
#     pass

# makgedirs
# 第三個(gè)參數(shù):exist_ok = True砸讳,文件夾存在不會(huì)報(bào)錯(cuò);如果是False且存在界牡,會(huì)報(bào)錯(cuò)  
os.makedirs('a/b/c', 0o733, exist_ok = True);

# rmdir
# 如果文件不存在會(huì)報(bào)錯(cuò)
try:
    os.rmdir('newDir')
except OSError as e:
    print(e)

# 刪除多級(jí)目錄
# 如果一級(jí)目錄下不為空簿寂,則不為空的目錄不會(huì)刪除
os.removedirs('a/b/c')

# rename
if not os.path.exists('mydir') and os.path.exists('yourdir'):
    os.mkdir('mydir')
    os.rename('mydir', 'yourdir')

# renames
if os.path.exists('a/b/c'):
    os.renames('a/b/c', 'x/y/z')
    
# remove刪除指定的文件
if os.path.exists('newdir/test.txt'):
    os.remove('newdir/test.txt')
# 如果用remove來刪除文件夾,會(huì)報(bào)“拒絕訪問”
os.remove('mydir')

軟連接和硬連接

'''
Linux/Unix/MaxOS X:
ln 硬連接宿亡,是物理文件的鏡像
ln -s  軟連接陶耍,相當(dāng)于是個(gè)快捷方式
'''
import os
if os.path.exists('data.txt') and not os.path.exists('slink_data.txt'):
    os.symlink('data.txt', 'slink_data.txt')

if os.path.exists('data.txt') and not os.path.exists('link_data.txt'):
    os.link('data.txt', 'link_data.txt');

用于獲取和設(shè)置系統(tǒng)信息的函數(shù)和變量

import os

print('文件系統(tǒng)路徑分隔符:', os.sep)
# win ";"  linux ":"
print('環(huán)境變量之間的分隔符:', os.pathsep)
print('操作系統(tǒng)名:', os.name)

# os.environ 環(huán)境變量
for name, value in os.environ.items():
    print('{} = {}'.format(name, value))

# 獲取指定的一個(gè)環(huán)境變量
print('PATH = ', os.environ['PATH'])
print('PATH = ', os.getenv('PATH'))

# 子進(jìn)程
import subprocess
output = subprocess.getstatusoutput('node -v');
print(output)

# os.system
os.system('dir')  # windows 
os.system('java -version')

集合(Set)

def printSet(obj):
    set1 = set(obj)
    print(set1)
    
# 創(chuàng)建一個(gè)集合
printSet(range(10))
# 字符串
printSet('abcdefg')
# 重復(fù)的
printSet('HelloKitty')

a = set((1, 2, 3))
b = set([3, 5, 1, 5])

# 并集
print(a.union(b))
print(a | b)

# 交集
print(a.intersection(b))
print(a & b)

# 子集
c = set([2, 3])
print(c.issubset(a)) # True
print(a.issubset(c)) # False

# 超集
print(c.issuperset(a)) # False 
print(a.issuperset(c)) # True

# 判斷集合是否相等
d = set([1, 3, 2])
print(a == d) # True

# 差集,三種寫法
print(a.symmetric_difference(b))
print(a ^ b)
print((a - b) | (b - a))

# copy
x = a.copy()
y = a
print(y is a)  # True
print(x is a)  # False

# contains
print(1 in a)  # True
print(10 in a) # False

將集合作為集合的元素: frozenset

a = set([1, 2])
b = set([10, 20])

# frozenset: 集合變成只讀了
a.add(4)
print(a)

a.add(frozenset(b))
print(a)
# for obj in a:
#     print(type(obj))
#     print(obj)

d = {'Bill': 19, 'Gates': 22}
d[frozenset(a)] = 10
print(d)

t = (1, 2, 3, 4)
b.add(t)
d[t] = 10
print(b)
print(d)

堆(heap)

參考:詳解Python中heapq模塊的用法

import heapq
from random import *

data = [1, 2, 3, 4, 5, 6, 7, 8, 9]
heap = []

# 向堆中添加元素 heappush
for n in data:
    value = choice(data)  # 來自random她混,從數(shù)組中任選一個(gè)
    heapq.heappush(heap, value)

print(heap)
# heappush(heap, 'aaa')  數(shù)據(jù)類型要一直,否則會(huì)報(bào)錯(cuò)
heapq.heappush(heap, 300)
heapq.heappush(heap, 301)
print(heap)

# 從堆中取出第一個(gè)元素 heappop
print(heapq.heappop(heap))
print(heap)


# 將數(shù)組轉(zhuǎn)為heap泊碑,重新排列了
data1 = [5, 6, 8, 0, 3]
print(data1)   # [5, 6, 8, 0, 3]
heapq.heapify(data1)
print(data1)   # [0, 3, 8, 6, 5]
print(heapq.heappop(data1))  # 0

# 刪除現(xiàn)有元素并將其替換為一個(gè)新值: heapreplace
print(data1)
print(heapq.heapreplace(data1, 123))
print(data1)

# nlargest
print(heapq.nlargest(1, data1))  # 返回“最大的”一個(gè)
print(heapq.nlargest(2, data1))  # 返回“最大的”兩個(gè)

# nsmallest
print(heapq.nsmallest(1, data))  # 返回“最小的”一個(gè)

# merge坤按,不去重,可排序
print(list(heapq.merge([5, 4, 6], [1], [98, 888])))
print(list(heapq.merge(['aaa', 'bbbbb'], 'c', ['HelloKitty'], 'c', key=len)))

雙端隊(duì)列

from collections import deque

# 將列表轉(zhuǎn)為雙端隊(duì)列
q = deque(range(10))
print(type(q))  # <class 'collections.deque'>
print(q)        # deque([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(q))

# 添加到隊(duì)尾
q.append(100)
q.append(101)
# 添加到隊(duì)首
q.appendleft(-1)
print(q)

# 彈出隊(duì)尾的值
print(q.pop())

# 彈出隊(duì)首的值
for i in range(3):
    print(q.popleft())
    
print('pop: ', list(q))

# 向左馒过、向右循環(huán)移動(dòng)
q.rotate(-2)
print(list(q))
q.rotate(4)
print(list(q))

# 向雙端隊(duì)列追加一個(gè)雙端隊(duì)列
# 數(shù)據(jù)類型可以是不一致的
q1 = deque(['a', 'b'])
q.extend(q1)
print(list(q))
q.extendleft(q1)
print(list(q))

時(shí)間元組

import time

# 獲取當(dāng)前時(shí)間
localtime = time.localtime(time.time())
print(localtime) # localtime是一個(gè)對(duì)象
print(type(localtime))  # <class 'time.struct_time'>
# 第一個(gè)參數(shù)是個(gè)元組
st = time.struct_time((1, 2, 3, 4, 5, 6, 7, 8, 9))
print(st)

print('年', ':', localtime.tm_year)
'''
tm_year:4位數(shù)字的年
tm_mon:月
tm_mday:日
tm_hour:小時(shí)
tm_min:分鐘
tm_sec:秒
tm_wday:一周的第幾日
tm_yday:一年的第幾日
tm_isdst:夏令時(shí)  1:夏令時(shí)臭脓, 0:不是夏令時(shí), -1:位置腹忽,默認(rèn)值是-1
'''

# 獲取一個(gè)刻度的時(shí)間
localtime = time.asctime()
print(localtime)  # Thu Aug 30 18:00:49 2018

格式化日期和時(shí)間

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

時(shí)間戳的增量

import time

time1 = time.time()
time2 = time1 + 60  # 加60秒
print(time1, time2)

time3 = time1 - 60*60
time3 = time.localtime(time3)
print(time3)
print(time.strftime('%Y-%m-%d %H:%M:%S', time3))

計(jì)算日期和時(shí)間的差

import datetime

# 計(jì)算日期的差
d1 = datetime.datetime(2019, 5, 5)
d2 = datetime.datetime(2028, 5, 5)
print((d2-d1).days)
print(type((d2 - d1)))  # <class 'datetime.timedelta'>

# 計(jì)算時(shí)間的差
d1 = datetime.datetime(2017,4,12,10,10,10)
d2 = datetime.datetime(2018,12,25,10,10,40)
print(d2 - d1)
print((d2 - d1).seconds)

# timedelta 直接用
d1 = datetime.datetime.now()
d2 = d1 + datetime.timedelta(hours=10)
print(d2)
d2 = d1 + datetime.timedelta(hours=-10)
print(d2)

獲取某年某月的日歷

import calendar
import locale

cal = calendar.month(2018, 1)
print(type(cal))  # <class 'str'>, 額来累,真的只是個(gè)日歷,字符串
print(cal)

# locale.setlocale(locale.LC_ALL, "")
print(calendar.calendar(2018))

隨機(jī)數(shù)

import random
'''
randint(m,n):用于產(chǎn)生m到n之間的隨機(jī)整數(shù)窘奏,包括m和n嘹锁。
random():用于產(chǎn)生0到1之間的隨機(jī)浮點(diǎn)數(shù),包括0着裹,但不包括1领猾。
uniform(m,n):用于產(chǎn)生m到n之間的隨機(jī)浮點(diǎn)數(shù),m和n可以是浮點(diǎn)數(shù),包括m和n摔竿。
randrange(m,n,step):在一個(gè)遞增的序列中隨機(jī)選擇一個(gè)整數(shù)面粮。其中step是步長。
例如继低,randrange(1,6,2)熬苍,該函數(shù)就會(huì)在列表[1,3,5]中隨機(jī)選擇一個(gè)整數(shù)。
choice(seq):從seq指定的序列中隨機(jī)選擇一個(gè)元素值袁翁。seq指定的列表元素可以是任意類型的值柴底。
sample(seq,k):從seq指定的序列中隨機(jī)選取k個(gè)元素,然后生成一個(gè)新的序列梦裂。
shuffle(seq):把seq指定的序列中元素的順序打亂似枕,該函數(shù)直接修改原有的序列。
'''
# 1 ~ 100 隨機(jī)整數(shù)
print(random.randint(1, 100))
# 0 ~ 1 之間的隨機(jī)數(shù)
print(random.random())
# 小于20的3的倍數(shù)
print(random.randrange(0, 20, 3))
# 1 ~ 100.5的隨機(jī)浮點(diǎn)數(shù)
print(random.uniform(1, 100.5))
# 從列表里面隨機(jī)選
intList = [1, 2, 3, 4, 5, 6]
print(random.choice(intList))
# 從列表里面隨機(jī)選三個(gè)
newList = random.sample(intList, 3)
print(newList)
# 打亂順序
random.shuffle(intList)
print(intList)

數(shù)學(xué)函數(shù)

import math

# 圓周率
print('圓周率:', math.pi)
print('自然常數(shù):', math.e)

# abs
print(math.fabs(-1.2))
# 向上取整
print(math.ceil(1.3))
# 向下取整
print(math.floor(1.9))
# 平方
print(math.pow(2, 10))
# 開根號(hào)
print(math.sqrt(4))
# 三角函數(shù)
print(math.sin(math.pi/2))
print(math.cos(math.pi))
print(math.tan(math.pi/4))

練習(xí)1

'''
1.  編寫一個(gè)Python程序年柠,從一個(gè)列表中隨機(jī)取3個(gè)元素值凿歼,
并按取值順序?qū)⒃刂到M成3級(jí)目錄,然后創(chuàng)建這個(gè)3級(jí)目錄冗恨。
例如答憔,有一個(gè)列表['a','b','c','d','e'],
現(xiàn)在取的值依次是'a'掀抹、'd'虐拓、'c',組成的3級(jí)目錄是“a/d/c”傲武,
然后使用相應(yīng)的函數(shù)創(chuàng)建這個(gè)3級(jí)目錄即可蓉驹。
'''
import random
import os
dirList = ['a', 'b', 'c', 'd', 'e', 'f']
path = ''
for name in random.sample(dirList, 3):
    path += name + os.sep
os.makedirs(path, exist_ok=True)

練習(xí)2

'''
編寫一個(gè)Python程序,從控制臺(tái)輸入兩個(gè)日期揪利,格式:2011-1-1态兴,
然后計(jì)算這兩個(gè)日期之間相差多少天,并輸出計(jì)算結(jié)果疟位。
如果輸入的日期格式錯(cuò)誤瞻润,會(huì)拋出異常,并輸出這個(gè)異常甜刻。
'''
# import datetime
from datetime import *
import math
try:
    d1 = input('輸入第一個(gè)日期(yyyy-mm-dd): ')
    d1 = datetime.strptime(d1, '%Y-%m-%d')
    d2 = input('輸入第二個(gè)日期(yyyy-mm-dd): ')
    d2 = datetime.strptime(d2, '%Y-%m-%d')
    print('兩個(gè)日期之前相差 {} 天'.format(int(math.fabs((d2-d1).days))))
except Exception as e:
    print('日期格式可能不對(duì):', e)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绍撞,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子得院,更是在濱河造成了極大的恐慌傻铣,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祥绞,死亡現(xiàn)場離奇詭異矾柜,居然都是意外死亡阱驾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門怪蔑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來里覆,“玉大人,你說我怎么就攤上這事缆瓣⌒希” “怎么了?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵弓坞,是天一觀的道長隧甚。 經(jīng)常有香客問我,道長渡冻,這世上最難降的妖魔是什么戚扳? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮族吻,結(jié)果婚禮上帽借,老公的妹妹穿的比我還像新娘。我一直安慰自己超歌,他們只是感情好砍艾,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著巍举,像睡著了一般脆荷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上懊悯,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天蜓谋,我揣著相機(jī)與錄音,去河邊找鬼炭分。 笑死桃焕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的欠窒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼退子,長吁一口氣:“原來是場噩夢啊……” “哼岖妄!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寂祥,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤荐虐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后丸凭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體福扬,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡腕铸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铛碑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狠裹。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汽烦,靈堂內(nèi)的尸體忽然破棺而出涛菠,到底是詐尸還是另有隱情,我是刑警寧澤撇吞,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布俗冻,位于F島的核電站,受9級(jí)特大地震影響牍颈,放射性物質(zhì)發(fā)生泄漏迄薄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一煮岁、第九天 我趴在偏房一處隱蔽的房頂上張望讥蔽。 院中可真熱鬧,春花似錦人乓、人聲如沸勤篮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碰缔。三九已至,卻和暖如春戳护,著一層夾襖步出監(jiān)牢的瞬間金抡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工腌且, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梗肝,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓铺董,卻偏偏與公主長得像巫击,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子精续,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

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

  • 〇坝锰、前言 本文共108張圖,流量黨請(qǐng)慎重重付! 歷時(shí)1個(gè)半月顷级,我把自己學(xué)習(xí)Python基礎(chǔ)知識(shí)的框架詳細(xì)梳理了一遍。 ...
    Raxxie閱讀 18,922評(píng)論 17 410
  • 一确垫、快捷鍵 ctr+b 執(zhí)行ctr+/ 單行注釋ctr+c ...
    o_8319閱讀 5,782評(píng)論 2 16
  • QQ群小伙伴提了一個(gè)非常典型的Word問題就是有關(guān)文字的間距。 解決這類問題需要有2個(gè)思路翔冀,牛閃閃跟大家聊聊解決思...
    秦川_牛閃閃閱讀 1,109評(píng)論 0 0
  • 今天导街,看了 《魷魚和鯨》,我竟然發(fā)現(xiàn)我原來看過橘蜜。但估計(jì)兩年前了菊匿。從剛開始,打網(wǎng)球就發(fā)現(xiàn)問題了计福。 哥哥和父親一伙跌捆,弟...
    teksab閱讀 105評(píng)論 0 0
  • 最近看了《前任攻略》说订,略感唏噓抄瓦。 男主去參加某任前女友婚禮,偶遇新郎的某任前女友——女主陶冷,眼前一亮钙姊。為了替她擋事兒...
    聶筱筱倩閱讀 1,397評(píng)論 0 0