1.今日內容
- 模塊基礎知識
- time/datetime
- json/picle
- shutil
- logging
- 其他
2.內容回顧和補充
2.1模塊(類別庫)
- 內置
- 第三方
- 自定義
面試題:
- 列舉常用內置模塊:json / time / os/ sys
2.2 定義模塊
定義模塊時可以把一個py檔案或一個檔案夾(包)當作一個模塊,以方便于以后其他py檔案的呼叫 ,
對于包(檔案夾)的定義:
-
py2:檔案見中必須有 _ _init _ _.py ,手工創建此檔案即可,
在pycharm中手工創建python package時候,默認自動會在這個檔案中創建--init--.py檔案,
-
py3:不需要 _ init _.py .
推薦大家以后寫代碼時,都要加上此檔案,
2.3 模塊的呼叫
2.3.1 示例一
# lizhongwei.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
def show():
print('我司里種種')
def func():
pass
print(456)
# 匯入模塊,加載此模塊中所有的值到記憶體,所以此時先列印出:456,后列印該代碼塊下面的123,
import lizhongwei
print(123)
# 呼叫模塊中的函式
lizhongwei.func()
# 匯入模塊
from lizhongwei import func,show
from lizhongwei import func
from lizhongwei import show
from lizhongwei import *
func()#from匯入方法,直接使用函式,
# 匯入模塊
from lizhongwei import func as f#別名法,防止func函式與現有代碼中函式重名,
def func():
print(123)
f()
匯入模塊:
- import 模塊 使用方式:模塊.函式()
- from 模塊 import 函式 使用方式:函式()
- from 模塊 import 函式 as 別名 使用方式:別名()
2.3.2 示例二
lizhong
- jd.py
- pdd.py
- tb.py
包.py
#上個代碼框中的檔案夾中檔案,參考如下方法:
import lizhong.jd
lizhong.jd.f1()
from lizhong import jd
jd.f1()
from lizhong.jd import f1
f1()
總結
- 模塊和要執行的py檔案在同一目錄 且 需要 模塊中的很多功能時,推薦用: import 模塊
- 其他推薦:from 模塊 import 模塊 用法:模塊.函式()
- 其他推薦:from 模塊.模塊 import 函式 用法:函式()
注意: sys.path的作用是什么?sys.path默認在py的安裝目錄和執行檔案當前所在的目錄,
1、如果要增加非py安裝目錄下,需要append非py安裝目錄,sys.path.append('path'),
然后在參考目錄下的py檔案就可以參考成功:如:import page
2、如果page的上級目錄和執行的檔案在同一個目錄(lib),這樣參考也可以:
from lib import page
3、如果page和執行的py檔案在同一個目錄下,直接參考即可,
import page
練習題
將父級目錄加入sys.path中,方便后期呼叫此父級下的代碼塊,
import sys
v=sys.path
print(v)
import os
print(__file__)
print(os.path.dirname(__file__))
print(os.path.abspath(__file__))
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(DIR)
print(sys.path)
===
['C:\\python\\venv', 'C:\\python', 'C:\\python\\python36\\python36.zip', 'C:\\python\\python36\\DLLs', 'C:\\python\\python36\\lib', 'C:\\python\\python36', 'C:\\python\\python36\\lib\\site-packages', 'C:\\python\\PyCharm 2019.2.2\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend']
C:/python/venv/day15.py
C:/python/venv
C:\python\venv\day15.py
C:\python
['C:\\python\\venv', 'C:\\python', 'C:\\python\\python36\\python36.zip', 'C:\\python\\python36\\DLLs', 'C:\\python\\python36\\lib', 'C:\\python\\python36', 'C:\\python\\python36\\lib\\site-packages', 'C:\\python\\PyCharm 2019.2.2\\PyCharm 2018.2.1\\helpers\\pycharm_matplotlib_backend', 'C:\\python']
2.4 內置模塊
-
os
-
sys
-
time
-
json
-
dumps
- dump(v,f)#將v寫入檔案f中,
-
loads
- print(load(f)),列印檔案中內容,
-
注意:
-
字典或串列中如有中文,序列化時想要保留中文顯示:
v = {'k1':'alex','k2':'李杰'} import json val = json.dumps(v,ensure_ascii=False)#保留中文 print(val) -
dump
import json v = {'k1':'alex','k2':'李杰'} f = open('x.txt',mode='w',encoding='utf-8') val = json.dump(v,f) print(val) f.close() -
load
import json v = {'k1':'alex','k2':'李杰'} f = open('x.txt',mode='r',encoding='utf-8') data = https://www.cnblogs.com/cuiyongchao007/p/json.load(f) f.close() print(data,type(data))
-
-
-
haslib
-
random
-
getpass
-
shutil
-
copy
3. 今日內容
3.1 json和pickle
- json,優點:所有語言通用;缺點:只能序列化基本的資料型別 list/dict/int...
- pickle,優點:python中所有的東西都能被他序列化(socket物件);缺點:序列化的內容只有python認識,
import pickle
# #################### dumps/loads ######################
"""
v = {1,2,3,4}
val = pickle.dumps(v)#序列化出來不可讀
print(val)
data = https://www.cnblogs.com/cuiyongchao007/p/pickle.loads(val)
print(data,type(data))"""
"""
#序列化函式(json做不到):
def f1():
print('f1')
v1 = pickle.dumps(f1)
print(v1)
v2 = pickle.loads(v1)
v2()
"""
# #################### dump/load ######################
# v = {1,2,3,4}
# f = open('x.txt',mode='wb')
# val = pickle.dump(v,f)
# f.close()
# f = open('x.txt',mode='rb')
# data = https://www.cnblogs.com/cuiyongchao007/p/pickle.load(f)
# f.close()
# print(data)
==================
encording后稱作位元組
json:得出來的是字串
pickle:得出來的是字串
3.2 shutil 模塊
import shutil
# 洗掉目錄
# shutil.rmtree('test')
# 重命名,檔案和目錄都可以
# shutil.move('test','ttt')
# 壓縮檔案
# shutil.make_archive('zzh','zip','D:\code\s21day16\lizhong')
# 解壓檔案,有目錄直接解壓,無目錄,則直接創建
# shutil.unpack_archive('zzh.zip',extract_dir=r'D:\code\xxxxxx\xxxx',format='zip')
示例
import os
import shutil
from datetime import datetime
ctime = datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
# 1.壓縮lizhongwei檔案夾 zip
# 2.放到到 code 目錄(默認不存在)
# 3.將檔案解壓到D:\x1目錄中,
if not os.path.exists('code'):
os.makedirs('code')
shutil.make_archive(os.path.join('code',ctime),'zip','D:\code\s21day16\lizhongwei')
file_path = os.path.join('code',ctime) + '.zip'
shutil.unpack_archive(file_path,r'D:\x1','zip')
3.3 time&datetime
UTC/GMT:世界時間
本地時間:本地時區的時間,
3.3.1 time模塊
- time.time() ,時間戳:1970-1-1 00:00
- time.sleep(10),等待秒數,
- time.timezone
# https://login.wx.qq.com/cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4ZwIFHM6iw==&tip=1&r=-781028520&_=1555559189206
3.3.2 datetime模塊
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import time
from datetime import datetime,timezone,timedelta
# ######################## 獲取datetime格式時間 ##############################
"""
v1 = datetime.now() # 當前本地時間
print(v1)
tz = timezone(timedelta(hours=7)) # 當前東7區時間
v2 = datetime.now(tz)
print(v2)
v3 = datetime.utcnow() # 當前UTC時間
print(v3)
"""
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
# ######################## 把datetime格式轉換成字串 ##############################
# v1 = datetime.now()
# print(v1,type(v1))
# val = v1.strftime("%Y-%m-%d %H:%M:%S")
# print(val)
# ######################## 字串轉成datetime ##############################
# v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
# print(v1,type(v1))
# ######################## datetime時間的加減 ##############################
# v1 = datetime.strptime('2011-11-11','%Y-%m-%d')
# v2 = v1 - timedelta(days=140)
# date = v2.strftime('%Y-%m-%d')
# print(date)
# ######################## 時間戳和datetime關系 ##############################
# ctime = time.time()
# print(ctime)
# v1 = datetime.fromtimestamp(ctime)
# print(v1)
# v1 = datetime.now()
# val = v1.timestamp()
# print(val)
3.4例外處理
try:
val = input('請輸入數字:')
num = int(val)
except Exception as e:
print('操作例外')
# import requests
#
# try:
# ret = requests.get('http://www.google.com')
# print(ret.text)
# except Exception as e:
# print('請求例外')
def func(a):
try:
return a.strip()
except Exception as e:
pass
return False
v = func('alex')
if not v:
print('函式執行失敗')
else:
print('結果是',v)
練習題
# 1. 寫函式,函式接受一個串列,請將串列中的元素每個都 +100
def func(arg):
result = []
for item in arg:
if item.isdecimal():
result.append(int(item) + 100)
return result
# 2. 寫函式去,接受一個串列,串列中都是url,請訪問每個地址并獲取結果,
import requests
def func(url_list):
result = []
try:
for url in url_list:
response = requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result
def func2(url_list):
result = []
for url in url_list:
try:
response = requests.get(url)
result.append(response.text)
except Exception as e:
pass
return result
func(['http://www.baidu.com','http://www.google.com','http://www.bing.com'])
例外處理結構:
try:
pass
except Exception as e:
pass
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/195328.html
標籤:Python
