基于網(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)
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)