python筆記16

来源:https://www.cnblogs.com/cuiyongchao007/archive/2020/02/11/12297314.html
-Advertisement-
Play Games

1.今日內容 模塊基礎知識 time/datetime json/picle shutil logging 其他 2.內容回顧和補充 2.1模塊(類庫) 內置 第三方 自定義 面試題: 列舉常用內置模塊:json / time / os/ sys 2.2 定義模塊 定義模塊時可以把一個py文件或一個 ...


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 = 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 = 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 = 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 

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 微信紅包業務,發紅包之後如果24小時之內沒有被領取完就自動過期失效。 架構設計 業務流程 老闆發紅包,此時緩存初始化紅包個數,紅包金額(單位分),並非同步入庫。 紅包數據入延遲隊列,唯一標識+失效時間 紅包數據出延遲隊列,根據唯一標識清空紅包緩存數據、非同步更新資料庫、非同步退回紅包金額 代碼案例 ...
  • 前言 截至2020年,Java仍然是構建Web應用程式的最流行的編程語言之一,儘管它必須面對來自Go,Python和TypeScript等新型語言的激烈競爭。 在Java世界內部,Spring框架已成為微服務開發的事實上的標準,通過諸如Spring Boot和Spring Data之類的庫,該框架易 ...
  • 本文將介紹一個重要的 "數據結構" —棧,和之前講到的 "鏈表" 、 "數組" 一樣也是一種數據呈 線性排列 的數據結構,不過在這種結構中,我們只能訪問最新添加的數據。棧就像是一摞書,拿到新書時我們會把它放在書堆的最上面,取書時也只能從最上面的新書開始取。 棧 如上就是棧的概念圖,現在存儲在棧中的只 ...
  • 作為一個Java從業者,面試的時候肯定會被問到過HashMap ...
  • 經過這次在公司實習中獲取到的經歷,我發現確實有時候書本上的知識發揮的作用微乎其微,好像是被問題打了太極拳一樣,你明明想去攻剋這個地方,他卻給你報了其他地方的錯誤。 平常的一些小項目根本就不能匹配到企業級別的開發經驗尤其我也不是ACM得獎的大佬,更是覺得尤為不適應,還好經過4個月左右的實習時間,我漸漸 ...
  • 結構體模板 1 struct STU 2 { 3 string name; //用string可以代替char 4 string num; 5 int s; 6 }; sort是用快速排序實現的,屬於不穩定排序,stable_sort是用歸併排序實現的,因此是穩定的。從此以後,為了保險起見我打算使用 ...
  • handler參數映射: 接下來就是Spring的各個處理細節了,無論框架如何瘋轉其實我們處理請求的流程是不變的,設計到的操作也是固定的,舉個例子,當我們要實現一個登陸功能時: 創建一個用於處理登錄請求的Servlet 實現doget等其他http方法(一些情況可能根據業務需要限制請求方法) 從re ...
  • 一. MybatisProperties 在使用 mybatis 時, 還需要對mapper進行配置: mybatis: mapper-locations: classpath:mapper/**Mapper.xml 這些配置其實是映射到 mybatis-spring-boot-autoconfig ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...