日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python基础教程目录,从入门到上手的

發布時間:2023/12/20 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础教程目录,从入门到上手的 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一、Python入門、環境搭建、變量、數據類型
    • 二、Python運算符、條件結構、循環結構
    • 三、Python函數
    • 四、做一次綜合練習,做一個控制臺的員工管理
    • 五、面向對象(封裝、繼承、多態)
    • 六、模塊、包、文件、異常、高階函數
    • 七、Python標準庫之字符串處理庫、文件及目錄操作、時間日期
    • 八、Python數據庫編程

因為清晰易讀的風格,廣泛的適用性,Python已經成為最受歡迎的編程語言之一。在TIOBE 排行榜中位居第四,是名副其實的人工智能第一語言。
風靡的另一個原因是,Python有非常多的第三方庫。比如用于WEB開發的Django/Flask,用于科學計算的 Numpy/Scipy,用于機器學習的 Scikit-Learn,用于運維的 Supervisor/Fabric,用于網絡爬蟲的 BeautifulSoup/Scrapy……這些你都可以輕松調用實現,不用再造輪子。

一、Python入門、環境搭建、變量、數據類型

Python的簡介
Python 是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言。
Python 的設計具有很強的可讀性,相比其他語言經常使用英文關鍵字,其他語言的一些標點符號,它具有比其他語言更有特色語法結構。
Python 是一種解釋型語言: 這意味著開發過程中沒有了編譯這個環節。類似于PHP和Perl語言。
Python 是交互式語言: 這意味著,您可以在一個 Python 提示符 >>> 后直接執行代碼。
Python 是面向對象語言: 這意味著Python支持面向對象的風格或代碼封裝在對象的編程技術
Python 是初學者的語言:Python 對初級程序員而言,是一種偉大的語言,它支持廣泛的應用程序開發,從簡單的文字處理到 WWW 瀏覽器再到游戲。
Python的特點
1.易于學習:Python有相對較少的關鍵字,結構簡單,和一個明確定義的語法,學習起來更加簡單
2.易于閱讀:Python代碼定義的更清晰。
3.易于維護:Python的成功在于它的源代碼是相當容易維護的。
4.一個廣泛的標準庫:Python的最大的優勢之一是豐富的庫,跨平臺的,在UNIX,Windows和Macintosh兼容很好。
5.互動模式:互動模式的支持,您可以從終端輸入執行代碼并獲得結果的語言,互動的測試和調試代碼片斷。
6.可移植:基于其開放源代碼的特性,Python已經被移植(也就是使其工作)到許多平臺。
7.可擴展:如果你需要一段運行很快的關鍵代碼,或者是想要編寫一些不愿開放的算法,你可以使用C或C++完成那部分程序,然后從你的Python程序中調用。
8.數據庫:Python提供所有主要的商業數據庫的接口。
9.GUI編程:Python支持GUI可以創建和移植到許多系統調用。
10.可嵌入: 你可以將Python嵌入到C/C++程序,讓你的程序的用戶獲得"腳本化"的能力。
環境搭建
Python的環境搭建其實是跟我們java的環境搭建是一樣的,java需要下載jdk,我們Python同樣需要下載“jdk”跟jdk是一樣的不過它不叫jdk,就叫Python,小編這里安裝的是3.7.4版本的
變量
這里跟java的區別就是沒有了類型

變量名:必須是大小寫英文、數字和_組成,且不能用數字開頭

規范:變量名 = 變量值
比如:
#字符串既可以是單引號也可以是雙引號
name = ‘Snail’
age = 22

數據類型
數據類型,我們來跟java做一個對比。我們java有8個,Python也是8個。但是我們的Python有一些事跟java不一樣的,比如:list列表,tuple元組,dict字典,和set集合。在java中也有set集合這個Python其實是跟它一樣的。字典其實跟java的Map也差不多

java數據類型: byte short int long double float char boolean

Python數據類型:

數值:int float 字符串:str 布爾類型:bool 列表list tuple元組:類似Java中的數組 集合set 字典dict:類似java中的Map

list列表
List運算


注意:list方法使用規則:列表名 . 方法()比如:name.append(“元素”)

tuple元組
set集合
Set集合就和Java中的Set集合是一樣的概念,存放的數據是無序的,并且不能添加重復的元素

創建set集合,使用{},多個值之間用,隔開 語法: 集合名={值1,值2}

set方法

dict字典(Map)
Dictionary字典,就類似java中的Map集合,以“鍵值對”的形式存放數據,key不能重復
語法格式:

字典名={key1:value1,key2:value2} 獲取值:
①.語法:字典名[“key”],比如:person[“name”],如果key不存在則會報錯 ②.語法:字典名.get(“key”),比如
person.get(“name”),如果key不存在,不會報錯,可以設置第二個參數為默認值 修改:
語法:字典名[key]=value,如果key存在則修改,如果不存在則創建一個新的key和value eg:
person[“name”]=“張三豐” 刪除: 語法:del 字典名[key] eg: del person[“name”]

dictionary方法

代碼測試:

# 單行注釋:# Ctrl+/ """ 這是多行注釋:3對雙引號 """ ''' 這是多行注釋:3對單引號 ''' print("hello world") # 定義變量 # 語法格式: 變量名 = 變量值 name = "張三" age = 22 salary = 2222.25 number = 22 print(name) # 注意:字符串拼接符+ 只能用在字符串類型 print("我是"+name) # 把int轉成str類型 print("我今年"+str(age)+"歲") # , 格式化工具 特點:有空格 print("我是", age)""" %s :用在字符串類型 %d :用在整數,默認是原樣輸出。設置位數不足時,用零補全,格式:%0nd(設置為位數) %f :用在浮點類型,默認小數點后保留6位,設置小數點后保留的個數,格式%.nf(n則為保留的位數) """ print("我的名字是%s" % name) print("我的年齡是%d歲" % age) print("我的日工資是%.1f元" % salary) print("我的學號是%03d號" % number)print("我的名字是%s,我的年齡是%d歲,我的日工資是%.1f元" % (name, age, salary)) # 全部類型都用%s print("我的名字是%s,我的年齡是%s歲,我的日工資是%s元" % (name, age, salary))# 格式化符號f print(f"我的名字是{name},我的年齡是{age}歲,我的日工資是{salary}元")# 轉義字符 print("人生\t苦短", end = "\"") print("我用Python")""" java數據類型: byte short int long double float char booleanPython數據類型: 數值:int float 字符串:str 布爾類型:bool 列表list tuple元組:類似Java中的數組 集合set 字典dict:類似java中的Map """ # bool isMan = True print(isMan)""" list列表: 定義格式:[] CRUD """# 定義list列表 hobbies = ["吃飯", "睡覺", "打豆豆", "敲代碼", "打籃球", "泡妞"] # 查詢所有 print(hobbies) # 查詢單個 print(hobbies[2]) # 查詢某些,使用切片 語法格式:列表名[起始位置:結束位置:步長] print(hobbies[0:6:3]) # 從倒數位拿數據 print(hobbies[-1])# 倒數獲取數據 print(hobbies[::-2]) # 添加或者替換 hobbies[1:2] = ["rap", "唱歌"] print(hobbies)# 刪除單個 # 語法格式: del 列表名[下標] # del hobbies[0] # print(hobbies) # 刪除多個 # 語法格式: del 列表名[切片] del hobbies[::2] print(hobbies)# list運算: + * in not in list1 = [1, 2, 3] list2 = [3, 5, 6] print(list1+list2) print(list1*5) print(2 in list1) print(2 not in list1)# 函數 print(len(list1)) print(min(list1)) print(max(list1))# list方法 # 追加 list1.append(4) list1.extend([10, 8]) list1.insert(0, 20)# 刪除 list1.pop(1) list1.remove(2) # list1.clear() print(list1)print(list1.index(20)) list1.reverse() print(list1)list1.sort(reverse=True) print(list1)""" 元組tuple 定義格式:() 不能增刪改,只能查 """ gender = ("男", "女", "人妖", "ji", "ya", "e") print(gender) # 添加:不可以 # gender[0:0] = ["不曉得"] # 修改 # gender[0] = "Man" # print(gender)a, b, c, d, e, f = gender a, *b = gender print(b)m = 1 n = 2 print(n, m) m, n = n, m print(n, m)""" 集合:set 定義格式:{} """ provinces = {"湖南省", "湖北省", "山西省", "山東省"} print(provinces) # 添加:不能使用和下標有關的 # provinces[0:0] = ["長沙省"]""" 字典:Map 語法:{"key":"value","key":"value"} """person = {"name": "老王", "age": 37} print(person)# 遍歷dict # 01 for key in person.keys():print(key, person.get(key))# 02 for value in person.values():print(value)# 03 for k, v in person.items():print(k, v)# 檢測變量的數據類型 print(type(name)) print(type(age)) print(type(salary)) print(type(person))num = input("請輸入您的銀行卡密碼:") print(num)

總結:推薦python學習解答學習扣扣群:數字778數字747數字511。歡迎有想法學習的python的伙伴加入,評論,每天有免費的直播課,

二、Python運算符、條件結構、循環結構

一、Python變量類型
類型
數值型、字符串、元組、列表、字典等
例:c/c++、java是強類型的編程語言,一個變量在使用前確定類型,在程序期間,變量的類型是不能改變的;
腳本語言:shell、python、perl、javaScript弱類型;

Python支持三種不同的數字類型

#有符號整數 int #浮點實數值 float #例 #16進制---0X 0x #8進制---0o 0O #2進制---0b 0B #二進制:bin() 八進制:oct() 十六進制:hex() #復數 complex #注意:復數由一對有序組成, #通過 x + yj 來表示實浮點數, #其中 x 和 y 是實數并且 j 是虛數單位

在Python3所有整數表示為長整型。因此,沒有單獨為long的整數類型。

#例 c1=bin(8) print(c1)#0b1000 c2=oct(8) print(c2)#0o10 c3=hex(8) print(c3)#0x10

字符串

#字符串變量 s="abc" s='abc'

將多個變量分配給不同的變量

x,y=6,8 print(x,y)

二、python支持運算
2.1算術運算符

#冪運算 x=8**3#8*8*8 #y得到float類型有小數點值 y=7/3#取整相除 y2=7//3 #y2返回2

2.2 比較(關系)運算符

x=8==8 print(x)#True y=False print(y)

2.3 賦值運算符

x=3 x+=5 print(x) #//= 地板除 x//=3 print(x) y=5.2789 y=y//2.954#返回1.0 print(y)

2.4 邏輯運算符

#and or not #input函數得到用戶輸入數據 year=int(input("請輸入年份")) #通過int()函數將參數轉換成整數 print(int(3.14)) if(year%400==0 or (year%4==0 and year%100!=0)):print("是一個閏年...") #例如:#if條件表達式或數值if(not 0):print("abc")print("over")

2.5位運算符

# > & | ^ ! ~ << >>

2.6 運算符成員
in ,not in
某元素是否在序列中,其中字符串就是序列

#例s="掌聲"y="聲"#s是字符串,in表示判斷y是否在s中存在c=y in sprint(c)#True

2.7 標識運算符
is如果操作符兩側是相同的對象,計算結果為true,否則結果為 false
is not 如果操作符兩側的變量是相同的對象,計算結果為false,否則 true

三、python流程控制結構
3.1 python 條件結構

#語法:if(): # 多條語句體 #注意: #if結構的語句體可以多條,使用統一位置縮進控制語句體; #例:if(條件):語句體....if()...else # 語法:if():多條語句體else:多條語句體if():...elif():...else:語法:if():多條語句體elif():多條語句體elif():多條語句體else: 多條語句體

3.2循環
3.2.1 while循環

i=0#A循環變量的初始化while(i<5):#B循環條件print(i)i+=1#C循環體內改變循環變量值

3.2.2 break,continue while…else

# else表示當while條件不成立,執行else部分#例:i=1 while(i<4):print(i)i+=1if(i==3):breakelse:print("循環結束...")print("ok")print("over...")結果:12over...

3.2.3 for…in循環

for 迭代變量 in 集合:語句... [else:語句...] #注意:#和for循環配合使用range函數range(stop) range(start, stop[, step]) for i in range(10,100,20):print(i) #練習 for..in循環實現斐波那契數列 1,1,2,3,5,8...one=1two=2for month in range(3,14):three=one+twoprint(three)#數值輾轉one=twotwo=three #函數def fn(n):if(n<=1):return n;else:return (f(n-1)+f(n-2))for i in range(20):print(f(i)) #例:i=1while(i<11):i = i + 1if(i%2!=0):continueprint(i) #例:九九乘法表i=1while(i<10):j=9while(j>=1):#輸出格式s="%d*%d=%d"%(i,j,i*j)print(s,sep="\t",end="\t")j-=1print()i=i+1 # for 循環 for i in range(1,10):for j in range(1,i+1):s="%d*%d=%2d"%(i,j,i*j)print(s,sep="\t",end="\t")print()

三、Python函數

函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。
函數能提高應用的模塊性,和代碼的重復利用率。你已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。
定義一個函數
你可以定義一個由自己想要功能的函數,以下是簡單的規則:
函數代碼塊以 def 關鍵詞開頭,后接函數標識符名稱和圓括號()。
任何傳入參數和自變量必須放在圓括號中間。圓括號之間可以用于定義參數。
函數的第一行語句可以選擇性地使用文檔字符串—用于存放函數說明。
函數內容以冒號起始,并且縮進。
return [表達式] 結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當于返回 None。
語法

def functionname( parameters ):"函數_文檔字符串"function_suitereturn [expression

后續學習,詳細點擊Python函數

四、做一次綜合練習,做一個控制臺的員工管理

直接上代碼

""" 需求:員工管理系統 功能: 1.添加員工信息 2.刪除員工信息 3.修改員工信息 4.查看單個員工信息 5.查看所有員工信息 6.退出技術:函數、數據類型(字典列表)、循環、條件語句 """ emps = [] # [{},{}]def chocieFunc():"""選擇功能列表"""print("*" * 30)print("1.添加員工信息")print("2.刪除員工信息")print("3.修改員工信息")print("4.查看單個員工信息")print("5.查看所有員工信息")print("6.退出")print("*" * 30)def addEmp():"""添加員工信息"""id = input("請輸入要添加的員工編號:")name = input("請輸入要添加的員工姓名:")gender = input("請輸入要添加的員工性別:")age = input("請輸入要添加的員工年齡:")emp = {"id": id, "name": name, "gender": gender, "age": age}emps.append(emp)print("添加OK!")def delEmp():"""刪除員工信息"""id = input("請輸入要刪除的員工編號:")for emp in emps:if emp.get("id") == id:# 將emp刪除,從empsemps.remove(emp)print("刪除OK!")breakelse:print("請輸入正確的員工編號")def updateEmp():"""修改員工信息"""id = input("請輸入要修改的員工編號:")for emp in emps:if emp["id"] == id:# 特別注意emp["name"] = input("請輸入要修改后的員工姓名:")emp["gender"] = input("請輸入要修改后的員工性別:")emp["age"] = input("請輸入要修改后的員工年齡:")# emp = {"id": id, "name": name, "gender": gender, "age": age}# 先刪除原有的emp,在追加新的emp【不推薦】print("修改成功!!!")breakelse:print("查無此人!!!")def getEmpById():"""查看單個員工信息"""id = input("請輸入要查詢的員工編號:")for emp in emps:if emp["id"] == id:print("編號\t姓名\t性別\t年齡")print(f"{emp['id']}\t{emp['name']}\t{emp['gender']}\t{emp['age']}")breakelse:print("查無此人!!!")def getAllEmps():"""查看所有員工信息"""print("編號\t姓名\t性別\t年齡")for emp in emps:print(f"{emp['id']}\t{emp['name']}\t{emp['gender']}\t{emp['age']}")else:print(f"共查詢到{len(emps)}條數據")print("******歡迎使用員工管理系統******") while True:chocieFunc()num = int(input("請輸入指令:"))if num == 1:addEmp()elif num == 2:delEmp()elif num == 3:updateEmp()elif num == 4:getEmpById()elif num == 5:getAllEmps()elif num == 6:print("歡迎下次再來!!!")breakelse:print("請輸入正確的指令")

五、面向對象(封裝、繼承、多態)

封裝是指隱藏類的實現細節,方便其他人的調用。

封裝的目的:
讓使用者可以通過間接調用方法或屬性操作對象。
所以Python使用封裝時,必會使用私有屬性和方法。
私有屬性和方法:
以‘__’雙下劃線開頭,不以雙下滑線結尾的表示符為私有成員,
私有成員只能使用該類的方法,來進行訪問和修改
1. 以__開頭的屬性為私有屬性 如__vol
2. 以__開頭的方法為私有方法 如__vol()
注:python封裝是假的封裝(模擬的封裝)
比如通過dir查看屬性就可以發現,其實私有屬性被變成了_class__xx,所以才無法訪問
多態 polymocphic
字面意思:‘多種狀態’
多態是指在有繼承/派生關系的類中,調用基類對象的方法,實際能調用子類的覆蓋方法的現象叫多態
狀態:
靜態(編譯時狀態)
動態(運行時狀態)
說明:
1,多態調用的方法與對象相關,不與類型相關
2,Python全部對象都只有“運行時狀態(動態)”
沒有C++語言里的編譯時狀態(靜態)
繼承 inheritance
繼承是從已有的類中派生出新的類,新類具有原類的數據屬性和行為,并
能拓展新的行為
繼承的目的:
延續舊類的功能
單繼承
語法:
class 類名(基類名):
語句塊
說明:
單繼承是指派生類由一個基類衍生出來的新類
多繼承 multiple inheritance
多繼承是指一個子類繼承自兩個或兩個以上的基類
語法:
class 類名(基類名1,基類名2,…)
說明:
一個子類同時繼承自多個父親,父類的方法可以同時被繼承下來
如果兩個父親中有同名的方法,而在子類中又沒有覆蓋此方法時,調用
結果難以確定
多繼承的問題(缺陷)
標識符沖突問題
(一般不推薦使用多繼承)

六、模塊、包、文件、異常、高階函數

模塊
ython 模塊(Module),是一個 Python 文件,以 .py 結尾,包含了 Python 對象定義和Python語句。
模塊讓你能夠有邏輯地組織你的 Python 代碼段。
把相關的代碼分配到一個模塊里能讓你的代碼更好用,更易懂。
模塊能定義函數,類和變量,模塊里也能包含可執行的代碼。
“”"

導入模塊 方式一 :import 模塊名 方式二 :from 模塊名 import 功能 方式三: from 模塊名 import * """# import Sinal# import Sinal as a # # 實列化模塊中的類 加模塊 # person = a.Person() # # person.eat() # person.sleep("楠楠") # # a.playDD() # print(a.age)# 方式二 :from 模塊名 import 功能 # from Sinal import Person # from Sinal import playDD # from Sinal import age # # person = Person() # person.sleep("小花") # # playDD() # print(age)# 方式三: from 模塊名 import * from myPackage.Sinal import * person = Person() person.sleep("小草")


1、什么是包?
官網解釋
Packages are a way of structuring Python’s module namespace by using “dotted module names”
包是一種通過使用‘.模塊名’來組織python模塊名稱空間的方式。
具體的:包就是一個包含有__init__.py文件的文件夾,所以其實我們創建包的目的就是為了用文件夾將文件/模塊組織起來
需要強調的是:
在python3中,即使包下沒有__init__.py文件,import 包仍然不會報錯,而在python2中,包下一定要有該文件,否則import 包報錯
創建包的目的不是為了運行,而是被導入使用,記住,包只是模塊的一種形式而已,包的本質就是一種模塊
2、為何要使用包
包的本質就是一個文件夾,那么文件夾唯一的功能就是將文件組織起來 隨著功能越寫越多,我們無法將所以功能都放到一個文件中,于是我們使用模塊去組織功能,而隨著模塊越來越多,我們就需要用文件夾將模塊文件組織起來,以此來提高程序的結構性和可維護性
3、注意事項
1.關于包相關的導入語句也分為import和from … import …兩種,但是無論哪種,無論在什么位置,在導入時都必須遵循一個原則:凡是在導入時帶點的,點的左邊都必須是一個包,否則非法。可以帶有一連串的點,如item.subitem.subsubitem,但都必須遵循這個原則。但對于導入后,在使用時就沒有這種限制了,點的左邊可以是包,模塊,函數,類(它們都可以用點的方式調用自己的屬性)。
2、import導入文件時,產生名稱空間中的名字來源于文件,import 包,產生的名稱空間的名字同樣來源于文件,即包下的__init__.py,導入包本質就是在導入該文件
3、包A和包B下有同名模塊也不會沖突,如A.a與B.a來自倆個命名空間

""" 包方式1:import 包名模塊名 方式2: from 包名.模塊名 import 功能 方式3:from 模塊名 import 功能 """# 方式1:import 包名模塊名 # import myPackage.Sinal # # person = myPackage.Sinal.Person() # person.sleep(23) # # myPackage.Sinal.playDD()# 方式二 # from myPackage.Sinal import Person # person = Person() # person.sleep("nn")# 方式3 from myPackage.Sinal import * person = Sinal.Person() person.sleep("nn")

文件

""" 文件 a:追加 append 沒有文件的時候會報錯 r:讀取 read 沒有文件的時候會報錯 w:寫 writer 在文件沒有的時候自動創建 """f = open("readme.txt", "r", encoding="UTF-8") # f.write("好好學習,天天向上")# 讀文件 # content = f.read(2) # content = f.readline() content = f.readlines() print(content[1])# 復制 try:f = open("C:/test.py", "r")content = f.read()print(content)a = open("D:/test.py", "w")a.write(content + "這個成功了")a = open("D:/test.py", "r")read = a.read()print(read)except Exception:print("不好意思了,失敗了呢") else:print("好棒,成功了") ———————————



異常
什么是異常
異常是一個事件,該會在程序執行過程中發生,影響了程序正常執行。一般情況下,在Python無法正常處理程序時就會發生一異常。異常是Python對象,表示一個錯誤。當Python腳本發生異常時我們需要捕獲處理它,否則程序會終止執行。
常見異常類型
異常名稱 描述
FileNotFoundError 找不到指定文件的異常
NameError 未聲明/初始化對象(沒有屬性)
BaseExcption 所有異常的基類

異常處理語句
try…except
try…except…finally
raise

""" 異常語法格式: try:可能會出現的異常代碼 except 異常類型1,異常類型2 | Exception:出現異常,解決異常的辦法 else:正常的代碼 finally:無論有沒有異常都會執行 """# 自定義異常 判斷密碼長度并能小于6位大于8位# try: # a = 6/0 # except ZeroDivisionError: # print("不能這樣除呢") # else: # print(a) # finally: # print("結束了,拜拜")class MyException(Exception):def __init__(self, length, minLength):self.length = lengthself.minLength = minLengthdef __str__(self):return f"輸入的長度為{self.length},要求長度最少{self.minLength}位"# try: # a = 6/0 # except ZeroDivisionError: # print("除數不能為0") # else: # print(f"a={a}") # finally: # print("運算結束")try:pwd = input("請輸入密碼:")if len(pwd) < 6:raise MyException(len(pwd), 6) except MyException as result:print(result) else:print(pwd)

高階函數
什么是高階函數?
  高階函數:一個函數可以作為參數傳給另外一個函數,或者一個函數的返回值為另外一個函數(若返回值為該函數本身,則為遞歸),滿足其一則為高階函數。

  """ 高階函數 map() reduce() filter() """import functools# 內置函數 # print(abs(-5)) # print(round(12.99, 1))# 高階函數: # map() list1 = [1, 2, 3, 4, 5]# def two(x): # return x ** 2# result = map(two, list1) # print(list(result))# reduce()# def add(x, y): # return x+y # # # print(functools.reduce(add, list1))# filter def ou(x):return x % 2 == 0result = filter(ou, list1) print(list(result))

總結:Python.模塊、包、文件、異常、高階函數學習介紹到這里了,給邀請喜歡學習的伙伴加入python解答學習扣扣群;778數字747數字511 ,一起學習,一起進步

七、Python標準庫之字符串處理庫、文件及目錄操作、時間日期

1.文件及目錄操作
os 模塊提供了非常豐富的方法用來處理文件和目錄。常用的方法如下表所示:具體操作點擊“文件及目錄操作”

2.字符串處理庫
字符串是 Python 中最常用的數據類型。我們可以使用引號('或")來創建字符串。
創建字符串很簡單,只要為變量分配一個值即可。例如:

var1 = 'Hello World!' var2 = "Python Runoob"

Python 訪問字符串中的值
Python 不支持單字符類型,單字符在 Python 中也是作為一個字符串使用。
Python 訪問子字符串,可以使用方括號來截取字符串,如下實例
實例(Python 2.0+)

#!/usr/bin/pythonvar1 = 'Hello World!' var2 = "Python Runoob"print "var1[0]: ", var1[0] print "var2[1:5]: ", var2[1:5]

以上實例執行結果:

var1[0]: H var2[1:5]: ytho

Python 字符串連接
我們可以對字符串進行截取并與其他字符串進行連接,如下實例:
實例(Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*-var1 = 'Hello World!'

print "輸出 :

  • ", var1[:6] + ‘Runoob!’
    Python 轉義字符
    在需要在字符中使用特殊字符時,python 用反斜杠 \ 轉義字符 ,想需要學習點擊:繼續學習完整讀完這一節

八、Python數據庫編程

數據庫的基本操作
創建數據庫:

CREATE DATABASE test;

GRANT ALL ON test.* to user(s);

第一行創建了一個名為“test”的數據庫,假設你是數據庫的管理員,第二行語句可以為指定用戶(或所有用戶)提升權限

使用數據庫

USE test;

如果你已經登錄一個數據庫系統,但是還沒有選擇你希望使用的數據庫,這條簡單的語句可以讓你指定一個數據庫,用來執行數據庫操作。

刪除數據庫

DROP DATABASE test;

這條簡單的語句可以從數據庫中移除所有表和數據,并將其從系統中刪除。

創建表

CREATE TABLE users (login VARCHAR(8), userid INT, projid INT);

這條語句創建一個新表,其中包含字符串列login,以及兩個整型列:userid和projid。

刪除表

DROP TABLE users;

這條簡單的語句可以刪除數據庫中的一個表,并清空其中的所有數據。

插入行

INSERT INTO users VALUES(‘leanna’,2111,1);

可以使用INSERT語句向數據庫中插入一個新行。需要指定表名以及其中每列的值。對于本例而言,字符串“leanna”對應于login參數,而2111和1分別對應于userid和projid。

更新行

UPDATE users SET projid=4 WHERE projid=2;

UPDATE users SET projid=1 WHERE userid=311;

為了修改表中已存在的行,需要使用UPDATE語句。使用SET來確定要修改的列,并提供條件來確定修改的行。在第一個例子中,所有“projid”為2的用戶需要改為4。而在第二個例子中,將指定用戶(這里是userid為311的用戶)移到編號為#1的項目組中。

刪除行

DELETE FROM users WHERE projid=%d;

DELETE FROM users;

為了刪除表中的行,需要使用DELETE FROM 命令,指定準備刪除的行的表名以及可選的條件。如果沒有這個條件,就會像第二個例子樣,把所有行都刪除了。

以上就是數據庫的一些基本的操作,從上我們可以看出:

創建數據庫(create)和刪除數據庫(drop),創建表和刪除表也一樣。

修改表中已存在的行叫做更新(update)和往數據庫里添加新行叫做插入(insert)

而移出表中已存在的行叫做刪除(delete)。

這些動作通常稱為數據庫命令或操作。使用可選的條件請求數據庫中的行稱為詢查(query)。

函數屬性&對象方法

connect()函數屬性 user 用戶名 password   密碼 host 主機名 database   數據庫名  MySQLdb數據庫使用的是db dsn 數據源名 connect()函數通過 Connection 對象訪問數據庫。兼容模塊必須實現 connect()函數,該函數創建并返回一個 Connection 對象。

應用與數據庫之間進行通信需要建立數據庫連接。它是最基本的機制,只有通過數據庫連接才能把命令傳遞到服務器,并得到返回的結果。當一個連接(或一個連接池)建立后,可以創建一個游標,向數據庫發送請求,然后從數據庫中接收回應。

Connection 對象方法
Connection 對象不需要包含任何數據屬性

close()         關閉數據庫連接 commit()        提交當前事務 rollback()       取消當前事務 cursor()        使用該連接創建(并返回)一個游標或類游標的對象 errorhandler(cxn,cur,errcls,errval) 作為給定連接的游標的處理程序

當使用 close()時,這個連接將不能再使用,否則會進入到異常處理中。

如果數據庫不支持事務處理,或啟用了自動提交功能,commit()方法都將無法使用。如果你愿意,可以實現單獨的方法用來啟動或關閉自動提交功能。

處理的數據庫而言,只需要在方法中實現“pass”即可。

和 commit()相似,rollback()方法也只有在支持事務處理的數據庫中才有用。發生異常之后,rollback()會將數據庫的狀態恢復到事務處理開始時。

如果 RDBMS 不支持游標,那么 cursor()仍然會返回一個盡可能模仿真實游標的對象。這是最基本的要求。每個適配器開發者都可以為他的接口或數據庫專門添加特殊屬性。

當你完成數據庫連接并關閉游標時,需要對所有操作執行 commit(),并對你的連接執行close()。

Cursor 對象

arraysize       使用fetchmany方法時,一次取出的結果行數,默認為1 connection        創建此游標的鏈接(可選) description       返回游標活動狀態(7選項元組):(name,type_code,display_size,internal_size,precision,scale,null_ok) lastrowid       上次修改的行ID(可選:如果不支持行ID,則返回None) rowcount        上次execute*()方法處理或影響的行數 callproc(func[,args])        調用儲存過程 close()      關閉游標 execute(op[,args])         執行數據庫查詢或命令 executemany(op,args)          類似execute()和map()的結合,為給定的所有參數準備執行的數據庫查詢或命令 fetchone()      獲取查詢結果的下一行 fetchmany([size=cursor.arraysize]) 獲取查詢結果的下面size行 fetchall()    獲取查詢結果的所有(剩余)行 __iter__()     為游標創建迭代器對象(可選,參考next()) messages      游標執行后從數據庫中獲取的消息列表(元組結合,可選) next()    被迭代器用于獲取查詢結果的下一行(可選,類似fetchone(),參考__iter__()) nextset()    移動到下一個結果集合(如果支持) rownumber    當前結果集中游標的索引(以行為單位,從0開始,可選) setinputsizes(sizes)      設置允許的最大輸入大小(必須有,但是實現是可選的) setoutputsize(size[,col])       設置大列獲取的最大緩沖區大小(必須有,但是實現是可選的)

當建立連接后,就可以和數據庫進行通信了。游標可以讓用戶提交數據庫命令,并獲得查詢的結果行。

當游標創建好后,就可以執行查詢或命令(或多個查詢和命令),并從結果集中取回一行或多行結果。

游標對象最重要的屬性是 execute*()和 fetch*()方法,所有針對數據庫的服務請求都是通過它們執行的。arraysize 數據屬性在為 fetchmany()設置默認大小時非常有用。當然,在不需要時關閉游標是個好主意,而如果你的數據庫支持存儲過程,可能會用到callproc()。
類對象和構造函數

Date (yr, mo, dy)                 日期值對象 Time (hr, min, sec)               時間值對象 Timestamp (yr, mo, dy, hr, min, sec)      時間戳值對象 DateFromTicks (ticks)               日期對象,給出從新紀元時間(1970 年 1 月 1 日 00:00:00 UTC)以來的秒數 TimeFromTicks (ticks)               時間對象,給出從新紀元時間(1970 年 1 月 1 日 00:00:00 UTC)以來的秒數 TimestampFromTicks (ticks)            時間戳對象,給出從新紀元時間(1970 年 1 月 1 日 00:00:00 UTC)以來的秒數 Binary (string)                  對應二進制(長)字符串對象 STRING                       表示基于字符串列的對象,比如 VARCHAR BINARY                       表示(長)二進制列的對象,比如 RAW、BLOB NUMBER                       表示數值列的對象 DATETIME                      表示日期/時間列的對象 ROWID                       表示“行 ID”列的對象

連接數據庫
以MySQL為例:
打開cmd輸入:pip3 install mysqlclient 安裝mysql驅動

>>> import MySQLdb as mysql 導入MySQL驅動重名為mysql >>> conn = mysql.connect('127.0.0.1','root','root') 連接數據庫 >>> conn = mysql.connect(host='127.0.0.1', port=3306, user='root', passwd='root', db='test', charset='utf8') 也可以使用關鍵字連接數據庫 >>> config = {'host': '127.0.0.1','port': 3306,'user': 'root','passwd': 'root','db': 'test','charset': 'utf8' } >>> conn = mysql.connect(**config) 也可以使用字典連接數據庫 >>> cur = conn.cursor()      創建cursor對象 >>> cur.execute('create table users (id varchar(20) primary key, name varchar(20))') 創建users表 >>> id = 1 >>> name = "smelond" >>> cur.execute("insert into users values('%s','%s')" % (id,name)) 插入一行記錄,注意MySQL的占位符是%s >>> cur.execute("update users set id=2 where id=1") 修改一行記錄 >>> cur.execute("select * from users") 查詢記錄 >>> values = cur.fetchall() 將查詢的記錄賦給values >>> values 輸出values (('2', 'smelond'),) >>> cur.execute("insert into users values(3,'admin')") 再次添加記錄 >>> cur.execute("select * from users") >>> values = cur.fetchall() >>> values (('2', 'smelond'), ('3', 'admin'))>>> conn.commit() 提交 >>> cur.close() 關閉cursor >>> conn.close() 關閉connection

ORM技術(sqlalchemy)
在Python中,最有名的ORM框架是SQLAlchemy

安裝SQLAlchemy

pip3 install sqlalchemy # 導入模塊 from sqlalchemy import Column, String, create_engine, INT from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base# 創建對象的基類: Base = declarative_base()# 定義User對象 class User(Base):__tablename__ = "users"# 表的結構id = Column(INT, primary_key=True)name = Column(String(20))# 初始化數據庫連接 # create_engine()用來初始化數據庫連接。SQLAlchemy用一個字符串表示連接信息 engine = create_engine("mysql://root:root@127.0.0.1:3306/test") # 創建DBSession類型 DBSession = sessionmaker(bind=engine)

向數據庫表中添加一行記錄。
由于有了ORM,我們向數據庫表中添加一行記錄,可以視為添加一個User對象:

# 創建session對象 session = DBSession() # 創建新User對象 new_user = User(name='smelond') # 由于我在數據庫里面設置id為主鍵,并且自動增長,所以這個地方可以不帶id。 # 添加到session session.add(new_user) # 提交即保存到數據庫 session.commit() # 關閉session session.close()

關鍵是獲取session,然后把對象添加到session,最后提交并關閉。DBSession對象可視為當前數據庫連接。

查詢記錄:

# 創建session對象 session = DBSession() # 創建Query查詢,filter是where條件,最后調用one()返回唯一行,如果條用all()則返回所有行: result = session.query(User).filter(User.name == 'smelond').one() print("type:", type(result)) print("name:", result.name) session.close()結果: type: <class '__main__.User'> name: smelond

從上面我們可以看出“還是ORM比較好用”。
文章就學到了,大家慢慢消化了,有什么都不懂了,可以加下python解答學習群:數字778數字747數字511

總結

以上是生活随笔為你收集整理的python基础教程目录,从入门到上手的的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。