當前位置:首頁 » 編程語言 » python3文檔

python3文檔

發布時間: 2024-06-21 05:11:14

Ⅰ 如何使用python3讀寫INI配置文件

ini文件簡介
ini是我們常見到的配置文件格式之一。
ini是微軟Windows操作系統中的文件擴展名(也常用在其他系統)。
INI是英文「初始化(Initial)」的縮寫。正如該術語所表示的,INI文件被用來對操作系統或特定程序初始化或進行參數設置。
網路
通過它,可以將經常需要改變的參數保存起來(而且還可讀),使程序更加的靈活。
我先給出一個ini文件的示例。
[School]
ip = 10.15.40.123
mask = 255.255.255.0
gateway = 10.15.40.1
dns = 211.82.96.1

[Match]
ip = 172.17.29.120
mask = 255.255.255.0
gateway = 172.17.29.1
dns = 0.0.0.0

這個配置文件中保存的是不同場合下的IP設置參數。
下面將以生成和讀取這個配置文件為例,進行講解。
Python(v3)讀取方法
首先,Python讀取ini配置需要用到ConfigParser包,所以要先載入它。
import configparser

之後我們需要載入配置文件。
config=configparser.ConfigParser()

#IpConfig.ini可以是一個不存在的文件,意味著准備新建配置文件。
config.read("IpConfig.ini")

接下來,我們可以使用configparser.add_section()向配置文件中添加一個Section。
#添加節School
config.add_section("School")

注意:如果文件中已經存在相應的項目,則不能再增加同名的節。
然後可以使用configparser.set()在節School中增加新的參數。
#添加新的IP地址參數
config.set("School","IP","192.168.1.120")
config.set("School","Mask","255.255.255.0")
config.set("School","Gateway","192.168.1.1")
config.set("School","DNS","211.82.96.1")

你可以以同樣的方式增加其它幾項。
#由於ini文件中可能有同名項,所以做了異常處理
try:
config.add_section("Match")
config.set("Match","IP","172.17.29.120")
config.set("Match","Mask","255.255.255.0")
config.set("Match","Gateway","172.17.29.1")
config.set("Match","DNS","0.0.0.0")
except configparser.DuplicateSectionError:
print("Section 'Match' already exists")

增加完所有需要的項目後,要記得使用configparser.write()進行寫入操作。
config.write(open("IpConfig.ini", "w"))

以上就是寫入配置文件的過程。
接下來我們使用configparser.get()讀取剛才寫入配置文件中的參數。讀取之前要記得讀取ini文件。
ip=config.get("School","IP")
mask=config.get("School","mask")
gateway=config.get("School","Gateway")
dns=config.get("School","DNS")

print((ip,mask+"\n"+gateway,dns))

完整示例
下面是一個完整的示常式序,他將生成一個IpConfig.ini的配置文件,再讀取文件中的數據,輸出到屏幕上。
# -*- coding: utf-8 -*-

import configparser

#讀取配置文件
config=configparser.ConfigParser()
config.read("IpConfig.ini")

#寫入宿舍配置文件
try:
config.add_section("School")
config.set("School","IP","10.15.40.123")
config.set("School","Mask","255.255.255.0")
config.set("School","Gateway","10.15.40.1")
config.set("School","DNS","211.82.96.1")
except configparser.DuplicateSectionError:
print("Section 'School' already exists")

#寫入比賽配置文件
try:
config.add_section("Match")
config.set("Match","IP","172.17.29.120")
config.set("Match","Mask","255.255.255.0")
config.set("Match","Gateway","172.17.29.1")
config.set("Match","DNS","0.0.0.0")
except configparser.DuplicateSectionError:
print("Section 'Match' already exists")

#寫入配置文件
config.write(open("IpConfig.ini", "w"))

ip=config.get("School","IP")
mask=config.get("School","mask")
gateway=config.get("School","Gateway")
dns=config.get("School","DNS")

print((ip,mask+"\n"+gateway,dns))

總結
Python讀取ini文件還是十分簡單的,這里我給出的只是一些簡單的使用方法,如果想用更高級的功能,比如和注釋有關的功能。可以參考Pyhton官方文檔

Ⅱ 後端編程Python3-資料庫編程

對大多數軟體開發者而言,術語資料庫通常是指RDBMS(關系資料庫管理系統), 這些系統使用表格(類似於電子表格的網格),其中行表示記錄,列表示記錄的欄位。表格及其中存放的數據是使用sql (結構化査詢語言)編寫的語句來創建並操縱的。Python提供了用於操縱SQL資料庫的API(應用程序介面),通常與作為標準的SQLite 3資料庫一起發布。

另一種資料庫是DBM (資料庫管理器),其中存放任意數量的鍵-值項。Python 的標准庫提供了幾種DBM的介面,包括某些特定於UNIX平台的。DBM的工作方式 與Python中的字典類似,區別在於DBM通常存放於磁碟上而不是內存中,並且其鍵與值總是bytes對象,並可能受到長度限制。本章第一節中講解的shelve模塊提供了方便的DBM介面,允許我們使用字元串作為鍵,使用任意(picklable)對象作為值。

如果可用的 DBM 與 SQLite 資料庫不夠充分,Python Package Index, pypi.python.org/pypi中提供了大量資料庫相關的包,包括bsddb DBM ("Berkeley DB"),對象-關系映射器,比如SQLAlchemy (www.sqlalchemy.org),以及流行的客戶端/伺服器數據的介面,比如 DB2、Informix、Ingres、MySQL、ODBC 以及 PostgreSQL。

本章中,我們將實現某程序的兩個版本,該程序用於維護一個DVD列表,並追蹤每個DVD的標題、發行年份、時間長度以及發行者。該程序的第一版使用DBM (通過shelve模塊)存放其數據,第二版則使用SQLite資料庫。兩個程序都可以載入與保存簡單的XML格式,這使得從某個程序導出DVD數據並將其導入到其他程序成為可能。與DBM版相比,基於SQL的程序提供了更多一些的功能,並且其數據設計也稍干凈一些。

12.1 DBM資料庫

shelve模塊為DBM提供了一個wrapper,藉助於此,我們在與DBM交互時,可以將其看做一個字典,這里是假定我們只使用字元串鍵與picklable值,實際處理時, shelve模塊會將鍵與值轉換為bytes對象(或者反過來)。

由於shelve模塊使用的是底層的DBM,因此,如果其他計算機上沒有同樣的DBM,那麼在某台計算機上保存的DBM文件在其他機器上無法讀取是可能的。為解決這一問題,常見的解決方案是對那些必須在機器之間可傳輸的文件提供XML導入與導出功能,這也是我們在本節的DVD程序dvds-dbm.py中所做的。

對鍵,我們使用DVD的標題;對值,則使用元組,其中存放發行者、發行年份以及時間。藉助於shelve模塊,我們不需要進行任何數據轉換,並可以把DBM對象當做一個字典進行處理。

程序在結構上類似於我們前面看到的那種菜單驅動型的程序,因此,這里主要展示的是與DBM程序設計相關的那部分。下面給出的是程序main()函數中的一部分, 忽略了其中菜單處理的部分代碼。

db = None

try:

db = shelve.open(filename, protocol=pickle.HIGHEST_PROTOCOL)

finally:

if db is not None:

db.dose()

這里我們已打開(如果不存在就創建)指定的DBM文件,以便於對其進行讀寫操作。每一項的值使用指定的pickle協議保存為一個pickle,現有的項可以被讀取, 即便是使用更底層的協議保存的,因為Python可以計算出用於讀取pickle的正確協議。最後,DBM被關閉——其作用是清除DBM的內部緩存,並確保磁碟文件可以反映出已作的任何改變,此外,文件也需要關閉。

該程序提供了用於添加、編輯、列出、移除、導入、導出DVD數據的相應選項。除添加外,我們將忽略大部分用戶介面代碼,同樣是因為已經在其他上下文中進行了展示。

def add_dvd(db):

title = Console.get_string("Title", "title")

if not title:

return

director = Console.get_string("Director", "director")

if not director:

return

year = Console.get_integer("Year", "year",minimum=1896,

maximum=datetime,date.today().year)

ration = Console.get_integer("Duration (minutes)", "minutes「, minimum=0, maximum=60*48)

db[title] = (director, year, ration)

db.sync()

像程序菜單調用的所有函數一樣,這一函數也以DBM對象(db)作為其唯一參數。該函數的大部分工作都是獲取DVD的詳細資料,在倒數第二行,我們將鍵-值項存儲在DBM文件中,DVD的標題作為鍵,發行者、年份以及時間(由shelve模塊pickled在一起)作為值。

為與Python通常的一致性同步,DBM提供了與字典一樣的API,因此,除了 shelve.open() 函數(前面已展示)與shelve.Shelf.sync()方法(該方法用於清除shelve的內部緩存,並對磁碟上文件的數據與所做的改變進行同步——這里就是添加一個新項),我們不需要學習任何新語法。

def edit_dvd(db):

old_title = find_dvd(db, "edit")

if old_title is None:

return

title = Console.get.string("Title", "title", old_title)

if not title:

return

director, year, ration = db[old_title]

...

db[title]= (director, year, ration)

if title != old_title:

del db[old_title]

db.sync()

為對某個DVD進行編輯,用戶必須首先選擇要操作的DVD,也就是獲取DVD 的標題,因為標題用作鍵,值則用於存放其他相關數據。由於必要的功能在其他場合 (比如移除DVD)也需要使用,因此我們將其實現在一個單獨的find_dvd()函數中,稍後將査看該函數。如果找到了該DVD,我們就獲取用戶所做的改變,並使用現有值作為默認值,以便提高交互的速度。(對於這一函數,我們忽略了大部分用戶介面代碼, 因為其與添加DVD時幾乎是相同的。)最後,我們保存數據,就像添加時所做的一樣。如果標題未作改變,就重寫相關聯的值;如果標題已改變,就創建一個新的鍵-值對, 並且需要刪除原始項。

def find_dvd(db, message):

message = "(Start of) title to " + message

while True:

matches =[]

start = Console.get_string(message, "title")

if not start:

return None

for title in db:

if title.lower().startswith(start.lower()):

matches.append(title)

if len(matches) == 0:

print("There are no dvds starting with", start)

continue

elif len(matches) == 1:

return matches[0]

elif len(matches) > DISPLAY_LIMIT:

print("Too many dvds start with {0}; try entering more of the title".format(start)

continue

else:

matches = sorted(matches, key=str.lower)

for i, match in enumerate(matches):

print("{0}: {1}".format(i+1, match))

which = Console.get_integer("Number (or 0 to cancel)",

"number", minimum=1, maximum=len(matches))

return matches[which - 1] if which != 0 else None

為盡可能快而容易地發現某個DVD,我們需要用戶只輸入其標題的一個或頭幾個字元。在具備了標題的起始字元後,我們在DBM中迭代並創建一個匹配列表。如果只有一個匹配項,就返回該項;如果有幾個匹配項(但少於DISPLAY_LIMIT, 一個在程序中其他地方設置的整數),就以大小寫不敏感的順序展示所有這些匹配項,並為每一項設置一個編號,以便用戶可以只輸入編號就可以選擇某個標題。(Console.get_integer()函數可以接受0,即便最小值大於0,以便0可以用作一個刪除值。通過使用參數allow_zero=False, 可以禁止這種行為。我們不能使用Enter鍵,也就是說,沒有什麼意味著取消,因為什麼也不輸入意味著接受默認值。)

def list_dvds(db):

start =」"

if len(db)> DISPLAY.LIMIT:

start = Console.get_string(「List those starting with [Enter=all]」, "start」)

print()

for title in sorted(db, key=str.lower):

if not start or title.Iower().startswith(start.lower()):

director, year, ration = db[title]

print("{title} ({year}) {ration} minute{0}, by "

"{director}".format(Util.s(ration),**locals()))

列出所有DVD (或者那些標題以某個子字元串引導)就是對DBM的所有項進行迭代。

Util.s()函數就是簡單的s = lambda x: "" if x == 1 else "s",因此,如果時間長度不是1分鍾,就返回"s"。

def remove_dvd(db):

title = find_dvd(db, "remove")

if title is None:

return

ans = Console.get_bool("Remove {0}?".format(title), "no")

if ans:

del db[title]

db.sync()

要移除一個DVD,首先需要找到用戶要移除的DVD,並請求確認,獲取後從DBM中刪除該項即可。

到這里,我們展示了如何使用shelve模塊打開(或創建)一個DBM文件,以及如何向其中添加項、編輯項、對其項進行迭代以及移除某個項。

遺憾的是,在我們的數據設計中存在一個瑕疵。發行者名稱是重復的,這很容易導致不一致性,比如,發行者Danny DeVito可能被輸入為"Danny De Vito",用於 一個電影;也可以輸入為「Danny deVito",用於另一個。為解決這一問題,可以使用兩個DBM文件,主DVD文件使用標題鍵與(年份,時間長度,發行者ID)值; 發行者文件使用發行者ID (整數)鍵與發行者名稱值。下一節展示的SQL資料庫 版程序將避免這一瑕疵,這是通過使用兩個表格實現的,一個用於DVD,另一個用於發行者。

12.2 SQL資料庫

大多數流行的SQL資料庫的介面在第三方模塊中是可用的,Python帶有sqlite3 模塊(以及SQLite 3資料庫),因此,在Python中,可以直接開始資料庫程序設計。SQLite是一個輕量級的SQL資料庫,缺少很多諸如PostgreSQL這種資料庫的功能, 但非常便於構造原型系統,並且在很多情況下也是夠用的。

為使後台資料庫之間的切換盡可能容易,PEP 249 (Python Database API Specification v2.0)提供了稱為DB-API 2.0的API規范。資料庫介面應該遵循這一規范,比如sqlite3模塊就遵循這一規范,但不是所有第三方模塊都遵循。API規范中指定了兩種主要的對象,即連接對象與游標對象。表12-1與表12-2中分別列出了這兩種對象必須支持的API。在sqlite3模塊中,除DB-API 2.0規范必需的之外,其連接對象與游標對象都提供了很多附加的屬性與方法。

DVD程序的SQL版本為dvds.sql.py,該程序將發行者與DVD數據分開存儲,以 避免重復,並提供一個新菜單,以供用戶列出發行者。該程序使用的兩個表格在圖12-1

def connect(filename):

create= not os.path.exists(filename)

db = sqlite3.connect(filename)

if create:

cursor = db.cursor()

cursor.execute("CREATE TABLE directors ("

"id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, "

"name TEXT UNIQUE NOT NULL)")

cursor.execute("CREATE TABLE dvds ("

"id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, "

"title TEXT NOT NULL, "

"year INTEGER NOT NULL,"

"ration INTEGER NOT NULL, "

"director_id INTEGER NOT NULL, 」

"FOREIGN KEY (director_id) REFERENCES directors)")

db.commit()

return db

sqlite3.connect()函數會返回一個資料庫對象,並打開其指定的資料庫文件。如果該文件不存在,就創建一個空的資料庫文件。鑒於此,在調用sqlite3.connect()之前,我們要注意資料庫是否是准備從頭開始創建,如果是,就必須創建該程序要使用的表格。所有査詢都是通過一個資料庫游標完成的,可以從資料庫對象的cursor()方法獲取。

注意,兩個表格都是使用一個ID欄位創建的,ID欄位有一個AUTOINCREMENT 約束——這意味著SQLite會自動為ID欄位賦予唯一性的數值,因此,在插入新記錄時,我們可以將這些欄位留給SQLite處理。

SQLite支持有限的數據類型——實際上就是布爾型、數值型與字元串——但使用數據'『適配器」可以對其進行擴展,或者是擴展到預定義的數據類型(比如那些用於日期與datetimes的類型),或者是用於表示任意數據類型的自定義類型。DVD程序並不需要這一功能,如果需要,sqlite3模塊的文檔提供了很多詳細解釋。我們使用的外部鍵語法可能與用於其他資料庫的語法不同,並且在任何情況下,只是記錄我們的意圖,因為SQLite不像很多其他資料庫那樣需要強制關系完整性,sqlite3另一點與眾不同的地方在於其默認行為是支持隱式的事務處理,因此,沒有提供顯式的「開始事務」 方法。

def add_dvd(db):

title = Console.get_string("Title", "title")

if not title:

return

director = Console.get_string("Director", "director")

if not director:

return

year = Console.get_integer("Year", "year」, minimum=1896,

maximum=datetime.date.today().year)

ration = Console.get_integer("Duration (minutes)", "minutes",

minimum=0,maximum=60*48)

director_id = get_and_set_director(db, director)

cursor = db.cursor()

cursor.execute("INSERT INTO dvds 」

"(title, year, ration, director_id)"

"VALUES (?, ?, ?, ?)",

(title, year, ration, director_id))

db.commit()

這一函數的開始代碼與dvds-dbm.py程序中的對應函數一樣,但在完成數據的收集後,與原來的函數有很大的差別。用戶輸入的發行者可能在也可能不在directors表格中,因此,我們有一個get_and_set_director()函數,在資料庫中尚無某個發行者時, 該函數就將其插入到其中,無論哪種情況都返回就緒的發行者ID,以便在需要的時候插入到dvds表。在所有數據都可用後,我們執行一條SQL INSERT語句。我們不需要指定記錄ID,因為SQLite會自動為我們提供。

在査詢中,我們使用問號(?)作為佔位符,每個?都由包含SQL語句的字元串後面的序列中的值替代。命名的佔位符也可以使用,後面在編輯記錄時我們將看到。盡管避免使用佔位符(而只是簡單地使用嵌入到其中的數據來格式化SQL字元串)也是可能的,我們建議總是使用佔位符,並將數據項正確編碼與轉義的工作留給資料庫模塊來完成。使用佔位符的另一個好處是可以提高安全性,因為這可以防止任意的SQL 被惡意地插入到一個査詢中。

def get_and_set_director(db, director):

director_id = get_director_id(db, director)

if directorjd is not None:

return director_id

cursor = db.cursor()

cursor.execute("lNSERT INTO directors (name) VALUES (?)」,(director,))

db.commit()

return get_director_id(db, director)

這一函數返回給定發行者的ID,並在必要的時候插入新的發行者記錄。如果某個記錄被插入,我們首先嘗試使用get_director_id()函數取回其ID。

def get_director_id(db, director):

cursor = db.cursor()

cursor.execute("SELECT id FROM directors WHERE name=?",(director,))

fields = cursor.fetchone()

return fields[0] if fields is not None else None

get_director_id()函數返回給定發行者的ID,如果資料庫中沒有指定的發行者,就返回None。我們使用fetchone()方法,因為或者有一個匹配的記錄,或者沒有。(我們知道,不會有重復的發行者,因為directors表格的名稱欄位有一個UNIQUE約束,在任何情況下,在添加一個新的發行者之前,我們總是先檢査其是否存在。)這種取回方法總是返回一個欄位序列(如果沒有更多的記錄,就返回None)。即便如此,這里我們只是請求返回一個單獨的欄位。

def edit_dvd(db):

title, identity = find_dvd(db, "edit")

if title is None:

return

title = Console.get_string("Title","title", title)

if not title:

return

cursor = db.cursor()

cursor.execute("SELECT dvds.year, dvds.ration, directors.name"

「FROM dvds, directors "

"WHERE dvds.director_id = directors.id AND "

"dvds.id=:id", dict(id=identity))

year, ration, director = cursor.fetchone()

director = Console.get_string("Director", "director", director)

if not director:

return

year = Console,get_integer("Year","year", year, 1896,datetime.date.today().year)

ration = Console.get_integer("Duration (minutes)", "minutes",

ration, minimum=0, maximum=60*48)

director_id = get_and_set_director(db, director)

cursor.execute("UPDATE dvds SET title=:title, year=:year,"

"ration=:ration, director_id=:directorjd "

"WHERE id=:identity", locals())

db.commit()

要編輯DVD記錄,我們必須首先找到用戶需要操縱的記錄。如果找到了某個記錄,我們就給用戶修改其標題的機會,之後取回該記錄的其他欄位,以便將現有值作為默認值,將用戶的輸入工作最小化,用戶只需要按Enter鍵就可以接受默認值。這里,我們使用了命名的佔位符(形式為:name),並且必須使用映射來提供相應的值。對SELECT語句,我們使用一個新創建的字典;對UPDATE語句,我們使用的是由 locals()返回的字典。

我們可以同時為這兩個語句都使用新字典,這種情況下,對UPDATE語句,我們可以傳遞 dict(title=title, year=year, ration=ration, director_id=director_id, id=identity)),而非 locals()。

在具備所有欄位並且用戶已經輸入了需要做的改變之後,我們取回相應的發行者ID (如果必要就插入新的發行者記錄),之後使用新數據對資料庫進行更新。我們採用了一種簡化的方法,對記錄的所有欄位進行更新,而不僅僅是那些做了修改的欄位。

在使用DBM文件時,DVD標題被用作鍵,因此,如果標題進行了修改,我們就需要創建一個新的鍵-值項,並刪除原始項。不過,這里每個DVD記錄都有一個唯一性的ID,該ID是記錄初次插入時創建的,因此,我們只需要改變任何其他欄位的值, 而不需要其他操作。

def find_dvd(db, message):

message = "(Start of) title to " + message

cursor = db.cursor()

while True: .

start = Console.get_stnng(message, "title")

if not start:

return (None, None)

cursor.execute("SELECT title, id FROM dvds "

"WHERE title LIKE ? ORDER BY title」,

(start +"%",))

records = cursor.fetchall()

if len(records) == 0:

print("There are no dvds starting with", start)

continue

elif len(records) == 1:

return records[0]

elif len(records) > DISPLAY_LIMIT:

print("Too many dvds ({0}) start with {1}; try entering "

"more of the title".format(len(records),start))

continue

else:

for i, record in enumerate(records):

print("{0}:{1}".format(i + 1, record[0]))

which = Console.get_integer("Number (or 0 to cancel)",

"number", minimum=1, maximum=len(records))

return records[which -1] if which != 0 else (None, None)

這一函數的功能與dvdsdbm.py程序中的find_dvd()函數相同,並返回一個二元組 (DVD標題,DVD ID)或(None, None),具體依賴於是否找到了某個記錄。這里並不需要在所有數據上進行迭代,而是使用SQL通配符(%),因此只取回相關的記錄。

由於我們希望匹配的記錄數較小,因此我們一次性將其都取回到序列的序列中。如果有不止一個匹配的記錄,但數量上又少到可以顯示,我們就列印記錄,並將每條記錄附帶一個數字編號,以便用戶可以選擇需要的記錄,其方式與在dvds-dbm.py程序中所做的類似:

def list_dvds(db):

cursor = db.cursor()

sql = ("SELECT dvds.title, dvds.year, dvds.ration, "

"directors.name FROM dvds, directors "

"WHERE dvds.director_id = directors.id")

start = None

if dvd_count(db) > DISPLAY_LIMIT:

start = Console.get_string("List those starting with [Enter=all]", "start")

sql += " AND dvds.title LIKE ?"

sql += 」 ORDER BY dvds.title"

print()

if start is None:

cursor.execute(sql)

else:

cursor.execute(sql, (start +"%",))

for record in cursor:

print("{0[0]} ({0[1]}) {0[2]} minutes, by {0[3]}".format(record))

要列出每個DVD的詳細資料,我們執行一個SELECT査詢。該査詢連接兩個表,如果記錄(由dvd_count()函數返回)數量超過了顯示限制值,就將第2個元素添加到WHERE 分支,之後執行該査詢,並在結果上進行迭代。每個記錄都是一個序列,其欄位是與 SELECT査詢相匹配的。

def dvd_count(db):

cursor = db.cursor()

cursor.execute("SELECT COUNT(*) FROM dvds")

return cursor.fetchone()[0]

我們將這幾行代碼放置在一個單獨的函數中,因為我們在幾個不同的函數中都需要使用這幾行代碼。

我們忽略了 list_directors()函數的代碼,因為該函數在結構上與list_dvds()函數非常類似,只不過更簡單一些,因為本函數只列出一個欄位(name)。

def remove_dvd(db):

title, identity = find_dvd(db, "remove")

if title is None:

return

ans = Console.get_bool("Remove {0}?".format(title), "no")

if ans:

cursor = db.cursor()

cursor.execute("DELETE FROM dvds WHERE id=?", (identity,))

db.commit()

在用戶需要刪除一個記錄時,將調用本函數,並且本函數與dvds-dbm.py程序中 相應的函數是非常類似的。

到此,我們完全查閱了 dvds-sql.py程序,並且了解了如何創建資料庫表格、選取 記錄、在選定的記錄上進行迭代以及插入、更新與刪除記錄。使用execute()方法,我們可以執行底層資料庫所支持的任意SQL語句。

SQLite提供了比我們這里使用的多得多的功能,包括自動提交模式(以及任意其他類型的事務控制),以及創建可以在SQL查詢內執行的函數的能力。提供一個工廠函數並用於控制對每個取回的記錄返回什麼(比如,一個字典或自定義類型,而不是欄位序列)也是可能的。此外,通過傳遞「:memory:」作為文件名,創建內存中的SQLite 資料庫也是可能的。

以上內容部分摘自視頻課程05後端編程Python22 資料庫編程,更多實操示例請參照視頻講解。跟著張員外講編程,學習更輕松,不花錢還能學習真本領。

Ⅲ python鎬庝箞榪涘叆緙栫▼鐣岄潰

1棣栧厛錛岀偣鍑誨紑濮嬫寜閽 2鍦ㄦ悳緔㈡爮杈撳叆IDLE錛屽ぇ灝忓啓閮藉彲浠ワ紝鏃犺烘槸Python2榪樻槸Python3閮芥槸涓鏍風殑 3鐢ㄩ紶鏍囧乏閿鍗曞嚮鎵撳紑鎼滅儲緇撴灉 4榪欐槸Python鎵撳紑鍚庣殑鐣岄潰錛屽氨濡傚悓浠栫殑鍚嶅瓧涓鏍風畝媧侊紝涓鐩浜嗙劧銆

鎵撳紑powershell鎴朿md絳塻hell紼嬪簭 閿鍏python xxxpy榪愯宲ython紼嬪簭錛 xxx浠h〃鍒氭墠淇濆瓨鐨勬枃浠跺悕銆
涓浣跨敤Python鐨勮В閲婂櫒1瀹夎卲ython涓鑸閮戒細鏈変竴涓浜や簰寮忚В閲婂櫒錛屾垜浠鍙浠ュ湪榪欓噷鐩存帴鍐欏叆榪愯 2浣嗗傛灉鎴戜滑灝嗗叾鍏抽棴錛屽垰鎵嶅啓鐨勪唬鐮佸氨浼氫涪澶辨ゆ椂錛屾垜浠鏂板緩涓涓鏂囨湰鏂囨。錛屽啓鍏print #39hello world#39錛岀劧鍚庡皢鏂囦歡鍚嶆敼鍐欎負銆
鐣岄潰濡備笅錛屽彲浠ヤ嬌鐢╬kg install鏉ュ畨瑁呭寘錛屽畨瑁卲ython鐨勮瘽錛屽懡浠ゆ槸鈥減kg install python鈥濓紝濡備笅璇風偣鍑昏緭鍏ュ浘鐗囨弿榪 鎴愬姛瀹夎卲ython鍚庯紝灝卞彲浠ヨ繍琛宲ython浜嗭紝杈撳叆python鍛戒護錛屽氨浼氳繘鍏python浜や簰寮忕幆澧冨備笅璇風偣鍑昏緭鍏ュ浘鐗囨弿榪般
1 鍒癙ythonx錛寉鐨勭綉鍧涓嬭澆Pythonx錛寉2750exe綰500M 2 瀹夎呯殑鏃跺欙紝閫夋嫨Full瀹屽叏瀹夎咃紝榪欐牱姣旇緝鐪佹椂涓庢柟渚垮畨瑁呭畬鎴愬氨鍙浠ヨ頒簨鏈綾諱技錛屽彧闇瑕佹柊寤轟竴涓銆
涓嬭澆鏂瑰紡鐩存帴鎼滅儲Termux鍗沖彲錛岀畝鍗曟柟渚誇簩姝ワ紝鎴愬姛瀹夎呭悗錛岀偣鍑籘ermux榪愯岋紝騫跺紑濮嬬紪紼嬪畨瑁匱ermux涔嬪悗錛屽彲浠ュ湪鎵嬫満妗岄潰鐪嬪埌璇ヨ蔣浠訛紝濡傚浘鎵紺虹劧鍚庣偣鍑昏繍琛孴ermux錛屾ゆ椂榪涘叆鍒癟ermux緙栫▼鐣岄潰絎涓夋ワ紝瀹夎匬ython鍦═ermux榪愯岀晫闈銆
鍙浠ュ埌360杞浠剁″舵垨鑰呰吘璁瀹夊叏綆″瓧錛 鐩存帴鎼滅儲python灝卞彲浠ュ畨瑁呭彲浠ュ幓python瀹樼綉涓嬭澆 鐒跺悗瀹夎呭傛灉浣犳湁python紼嬪簭錛 浣犳妸紼嬪簭鎷栧埌璁頒簨鏈灝卞彲浠ユ煡鐪嬩唬鐮 濡傛灉浣犳槸浣犲箆b鐔熺殑璇濈數鑴戣嚜甯︾殑vbs涔熸槸鎸轟笉閿欑殑銆
濡俻yuic5 o testpy testui錛屽備笅錛屽氨鏄鍒氭墠璁捐$殑UI鐣岄潰鐨凱ython浠g爜榪欓噷鎴戜滑鍐嶆坊鍔犱竴涓媘ain鍑芥暟錛岀洿鎺ュ壋寤轟笂闈㈢被鐨勫硅薄錛屾樉紺哄硅瘽妗嗗氨琛岋紝濡備笅鐐瑰嚮榪愯岃繖涓紼嬪簭錛屾晥鏋滃備笅錛屽拰涓婇潰璁捐$殑涓鏍鳳紝闈炲父鏂逛究銆
鍙浠ヤ笅杞藉幓python瀹樼綉涓嬭澆涓涓瀹夎呭寘錛屼篃鍙浠ヤ笅杞界被浼紁ycharm鐨勭紪杈戝櫒榪涜岀紪紼嬨

榪欐槸緙栬緫鍣ㄧ殑shell 鐣岄潰 灝辮窡 鑺+r 鐒跺悗cmd錛屽嚭鏉ョ殑鐣岄潰浣犺緭鍏python 鏄涓鏍風殑鏁堟灉銆
涓鐪嬩綘灝辨槸鏂版墜錛屾垜浠ュ墠涔熷湪鎯蟲庝箞榛戠櫧妗嗗彉鎴愮獥鍙f嗭紝寰堢畝鍗曠殑錛岀洿鎺ョ敤python瀵瑰簲鐨勬柟娉曞氨鍙浠ヤ簡錛屾湁PyQt錛孭ython浠涔堢殑錛岀洿鎺pip灝卞彲浠ヤ簡錛屾噦鐒跺悗瀵煎寘錛岃︾粏鐨勬柟娉曞弬鑰冩枃妗e嵆鍙銆
1棣栧厛鍦ㄨ祫婧愮$悊鍣ㄩ噷澶嶅埗涓涓媝y鏂囦歡瀛樻斁鐨勮礬寰勶紝鎸変笅windows閿錛媟錛屽湪榪愯岄噷杈撳叆cmd錛屽洖杞︽墦寮鍛戒護琛2鍦ㄥ懡浠よ岄噷錛屽厛鍒囨崲鍒皃y鏂囦歡鐨勮礬寰勪笅闈錛屾帴鐫杈撳叆鈥減ython 鏂囦歡鍚峱y 鈥濊繍琛宲ython鏂囦歡3鎸変笅鍥炶濺閿錛屽彲浠ャ
鑷瀛python鐨勫墠鎻愭槸錛屼綘鐭ラ亾瀛︿粈涔坧ython寮鍙戞柟鍚戜紬澶氾紝鎴戞兂宸ヤ綔鐨勯嗗煙鏄浠涔堣揪鍒板伐浣滄爣鍑嗚佹帉鎻″摢浜涚煡璇嗚繖浜涚煡璇嗕粠鍝閲岃幏寰楀﹀埌浠涔堢▼搴︾畻鍚堟牸璐哥劧鍘昏嚜瀛﹀彧鑳借秺瀛﹁秺鍋2闇瑕佸緢寮虹殑鑷鍒惰兘鍔 java緙栫▼涓嶆瘮鍏朵粬鎶鑳姐
瀹屽叏鍙浠ヨ屼笖榪樺彲浠ヨ法騫沖彴 鍙戣岀増鑷甯︾殑搴撴湁Tkinter錛岃憲鍚嶇殑絎涓夋柟搴撴湁PythonPyGTKPyQT絳夊叾涓璔T鏄涓涓璺ㄥ鉤鍙扮殑寮哄ぇ鐨刄I鍥懼艦搴擄紝钁楀悕鐨刧oogle earth妗岄潰鐗圤pear灝辨槸鐢≦T鍐欑殑鐣岄潰QT鐨凱ython瀹炵幇鍙鍋歅yQT錛岀敤Pytho銆
涓閮ㄧ講Python緙栫▼鐜澧 鎴戠殑鏄痺indowsx86錛64浣嶇郴緇燂紝鎵浠ユ垜閫夋嫨浜哖ython360錛64浣嶇殑緗戠粶瀹夎呯増鎴戞病鏁㈤夋渶鏂扮殑錛屾曞叾浠栧寘娌℃湁鐩稿簲鏇存柊錛屾墍浠ラ変簡涓涓絎浜屾柊鐨勪簩璁劇疆鐜澧冨彉閲 綆鍗曡達紝璁劇疆鐩稿簲鎵ц岀▼搴忕殑鐜澧冨彉閲忋

Ⅳ 鍋囨湡蹇呴』鎺屾彙鐨勭紪紼嬪姙鍏搴

娌℃湁榪欎簺Python緙栫▼鍔炲叕搴撴嬁浠涔堝﹀ソ鑷鍔ㄥ寲!


Python Excel鑷鍔ㄥ寲搴

1.xl wings搴

鐗圭偣錛歺l wings鏄寮婧愪笖鍏嶈垂鐨勶紝 棰勮呬簡Anaconda鍜

Win Python錛 鍙鍦╓indows鍜宮acos涓婅繍琛屻

2.open pyx l搴

鐗圭偣錛歰pen pyx l鏄涓涓鐢ㄤ簬璇誨彇/緙栧啓Excel 2010

xls x/xls m/xl tx/xl tm鏂囦歡鐨凱ython搴撱

3.xl rd搴

鐗圭偣錛氬湪python涓錛 xi rd搴撴槸涓涓寰堝父鐢ㄧ殑璇誨彇excel鏂囦歡鐨

搴擄紝 鍏跺筫xcel鏂囦歡鐨勮誨彇鍙浠ュ疄鐜版瘮杈冪簿緇嗙殑鎺у埗銆

4.xl wt搴

鐗圭偣錛氱被姣斾簬xi rd鐨剅eader錛 閭d箞xl wt灝辯浉瀵箇riter錛 鑰屼笖寰

綰姝g殑涓鐐瑰氨鏄瀹冨彧鑳藉笶xcel榪涜屽啓鎿嶄綔銆

5.xl utils搴

鐗圭偣錛歺l utils(excel utilities) 鏄涓涓鎻愪緵浜嗚稿氭搷浣滀慨鏀筫xcel

鏂囦歡鏂規硶鐨勫簱銆倄l utils搴撲篃浠呬粎鏄閫氳繃澶嶅埗涓涓鍓鏈榪涜

鎿嶄綔鍚庝繚瀛樹竴涓鏂版枃浠訛紝 xl utils搴撳氨鍍忔槸xi rd搴撳拰xl wt搴撲箣

闂寸殑涓搴фˉ姊侊紝 鍥犳わ紝 xl utils搴撴槸渚濊禆浜巟i rd鍜寈l wt涓や釜搴撶殑銆

6.xls x writer搴

鐗圭偣錛歺ls x writer鏄鐢ㄤ簬鍒涘緩Excel XLS X鏂囦歡鐨凱ython妯″潡錛 鍙鐢

浜庡皢鏂囨湰銆佹暟瀛椼佸叕寮忓拰瓚呴摼鎺ュ啓鍏Excel 2007+XLS X鏂囦歡涓鐨

澶氫釜宸ヤ綔琛ㄣ

7.pandas搴

鐗圭偣錛歱andas鏄鍩轟簬NumPy鐨勪竴縐嶅伐鍏鳳紝 璇ュ伐鍏鋒槸涓轟簡瑙e喅鏁

鎹鍒嗘瀽浠誨姟鑰屽壋寤虹殑銆

8.Mar mir搴

鐗圭偣錛歁ar mir閲囩敤Python鏁版嵁緇撴瀯騫跺皢鍏惰漿鎹涓虹數瀛愯〃鏍箋傚畠鏄

綾誨滻閱囦笂鐨剎l wt鍜宷 oogle鐢靛瓙琛ㄦ牸銆傜洰鏍囨槸浣跨敤鏈灝戠殑閰嶇疆杞

鏉劇敓鎴愬氱嶇被鍨嬬殑鏈夌敤琛ㄦ枃浠躲

Python Word鑷鍔ㄥ寲搴

1.python-doc x搴

鐗圭偣錛歱ython-doc x鏄涓涓鐢ㄤ簬鍒涘緩鍜屾洿鏂癕icrosoft

Word(doc x) 鏂囦歡鐨凱ython搴撳揩閫熷紑濮嬨佸勭悊鏂囨。銆傚勭悊鏂囨湰銆

浣跨敤鎴闈銆佷嬌鐢ㄩ〉鐪夊拰欏佃剼銆丄PI鍩虹鐞嗐佽В鏍峰紡銆佷嬌鐢ㄦ牱寮忕悊

瑙e浘鐗囧拰鍏朵粬褰㈢姸

2.t extract搴

鐗圭偣錛氬畠鍚屾椂鍏奸【"doc"鍜"doc x"錛 浣嗗畨瑁呰繃紼嬮渶瑕佷竴浜涗緷璧栥

浣犲彲浠ユ壒閲忕殑鐢╬ython鐢熸垚word鏂囦歡錛 鎺ㄨ崘浣跨敤doc x錛 涓嶉渶瑕侊駿

浼氬お澶氥

Python PPT鑷鍔ㄥ寲搴

1.python-pp tx搴

鐗圭偣錛歱ython-pp tx鏄涓涓鐢ㄤ簬鍒涘緩鍜屾洿鏂癙owerPoint

(pp tx) 鏂囦歡鐨凱ython搴撱傚吀鍨嬬敤閫旀槸浠庢暟鎹搴撳唴瀹圭敓鎴愯嚜瀹氫箟

PowerPoint婕旂ず鏂囩匡紝 鍙閫氳繃鍗曞嚮Web搴旂敤紼嬪簭涓鐨勯摼鎺ヤ笅杞

Python閭浠惰嚜鍔ㄥ寲搴

1.Dian go Celery SES搴

鐗圭偣錛氳繖涓鍖呮彁渚涗簡涓涓狤mail Backend鏉ュ埄鐢╠jango-

celery鍙戦佺數瀛愰偖浠躲傛偍鍙浠ュ皢Email Backend鎻掑叆鎮ㄧ殑欏圭洰涓

錛岃屾棤闇瀵逛唬鐮佽繘琛屼換浣曚慨鏀廣

2.Envelopes搴

鐗圭偣錛欵nvelopes鏄疨ython鐨勭數瀛愰偖浠跺拰smtp lib妯″潡鐨勫寘瑁呭櫒銆

瀹冩棬鍦ㄤ嬌鍦≒ython涓澶勭悊澶栧彂鐢靛瓙閭浠跺彉寰楃畝鍗曡屾湁瓚c

3.Flanker搴

鐗圭偣錛氱敱mail qun寮婧愮殑Flanker-emailaddress and

MIME parsing for Python鏄涓涓瑙f瀽楂樻晥銆佸歸敊鐜囦笉閿欑殑

python絎涓夋柟鎵╁睍搴撱

4.im box搴

鐗圭偣錛氱敤浜庤誨彇IMAP閭綆卞苟灝嗙數瀛愰偖浠跺唴瀹硅漿鎹涓烘満鍣ㄥ彲璇

鏁版嵁鐨凱ython搴

5.inbox.py搴

鐗圭偣錛氳繖鏄鎮ㄨ佽繃鐨勬渶綆鍗曠殑SMTP鏈嶅姟鍣ㄣ傚畠鏄寮傛ョ殑銆備竴涓瀹

渚嬫瘡縐掑簲璇ュ勭悊涓鍗冨氬皝鐢靛瓙閭浠

Python ODF鑷鍔ㄥ寲搴

1.Relato rio搴

鐗圭偣錛歊elato rio鏄涓涓妯℃澘搴擄紝 瀹冩彁渚涗簡涓縐嶈交鏉捐緭鍑哄氱嶆枃浠

(odt銆乷ds銆乸ng銆乻vg絳) 鐨勬柟娉曘傞氳繃涓哄畠浠鍒涘緩鎻掍歡鍙浠ヨ交

鏉炬坊鍔犲規洿澶氭枃浠剁被鍨嬬殑鏀鎸併

Python PDF鑷鍔ㄥ寲搴

1.Py PDF 2搴

鐗圭偣錛歅y PDF 2鏄涓涓綰疨ython PDF搴擄紝 鑳藉熸媶鍒嗐佸悎騫躲佽佸壀

鍜岃漿鎹PDF鏂囦歡鐨勯〉闈銆傚畠榪樺彲浠ュ悜PDF鏂囦歡娣誨姞鑷瀹氫箟鏁版嵁銆

鏌ョ湅閫夐」鍜屽瘑鐮併

2.ReportLab搴

鐗圭偣錛歊eportLab鏄涔呯粡鑰冮獙銆佽秴寮哄ぇ鐨勫紑婧愬紩鎿庯紝 鐢ㄤ簬鍒涘緩澶

鏉傜殑銆佹暟鎹椹卞姩鐨凱DF鏂囨。鍜岃嚜瀹氫箟鐭㈤噺鍥懼艦銆傚畠鏄鍏嶈垂鐨勩佸紑

婧愮殑錛 騫朵笖鏄鐢≒ython緙栧啓鐨勩

3.PDF miner搴

鐗圭偣錛歅DF Miner鏄涓嬈劇敤浜嶱DF鏂囨。鐨勬枃鏈鎻愬彇宸ュ叿銆

Python寰淇¤嚜鍔ㄥ寲搴

1.Python wxp y搴

鐗圭偣錛氬井淇℃満鍣ㄤ漢/鍙鑳芥槸鏈浼橀泤鐨勫井淇′釜浜哄彿API錛 wxp y鍦╥t chat

鐨勫熀紜涓婏紝閫氳繃澶ч噺鎺ュ彛浼樺寲鎻愬崌浜嗘ā鍧楃殑鏄撶敤鎬э紝騫惰繘琛屼赴瀵

鐨勫姛鑳芥墿灞曘

Python鏂囦歡澶勭悊鑷鍔ㄥ寲搴

1.os搴

鐗圭偣錛氭湰妯″潡鎻愪緵浜嗕竴縐嶄嬌鐢ㄤ笌鎿嶄綔緋葷粺鐩稿叧鐨勫姛鑳戒究鎹峰紡閫斿緞

Python緇煎悎鍔熻兘鑷鍔ㄥ寲搴

1.win32com搴

鐗圭偣錛歸in32com妯″潡涓昏佷負Python鎻愪緵璋冪敤windows搴曞眰緇勪歡

瀵箇ord銆丒xcel銆丳PT絳夎繘琛屾搷浣滅殑鍔熻兘錛 鍙鑳藉湪Windows鐜澧

涓嬩嬌鐢錛 騫朵笖闇瑕佸畨瑁卭ffice鐩稿叧杞浠舵墠琛(WPS涔熻) 銆

2.u noconv搴

鐗圭偣錛氭槸涓涓鍛戒護琛屽伐鍏鳳紝 鍙浠ュ皢Libre Office鍙浠ュ煎叆鐨勪換浣曟枃

妗f牸寮忚漿鎹涓篖ibre Office鍙浠ュ煎嚭鐨勪換浣曟枃妗f牸寮忋傚畠鍒╃敤

Libre Office鐨刄NO緇戝畾榪涜屾枃妗g殑闈炰氦浜掑紡杞鎹錛 涔熸敮鎸

OpenOffice.



Ⅳ python/java/web前端需要哪個編程資料

Python、Java和Web前端都需要相應的編程資料來學習和提高編程能耐余亂力,以下是一些常用的編程資料:

Python編程資料:

《Python編毀運程從入門到實踐》

《Python核心編程》

《Python Cookbook》

Python官方文檔

Python編程網站(如Python官網、Python教程網等)

Java編程資料:

《Java編程思想》

《Effective Java》

《Head First Java》

Java官方文檔

Java編程網站(如Java官網、Java教程網等)

Web前端編程資料:

《JavaScript高級程序設計》

《CSS權威指南》

《HTML5權威指南》

MDN Web文檔

Web前端編程網站(昌檔如W3School、Bootstrap中文網等)

以上是一些常用的編程資料,但不限於此,還有很多其他的資料可以供大家學習和參考。

Ⅵ python 幫助文檔 怎麼使用

  1. python幫助文檔是chm格式的(即英語「Compiled Help Manual」的簡寫,即「已編譯的幫助文件」。)

  2. CHM是微軟新一代的幫助文件格式,利用HTML作源文,把幫助內容以類似資料庫的形式編譯儲存。

    python幫助文檔在python安裝目錄的doc文件夾下,雙擊即可打開。



熱點內容
漏油器密碼怎麼改密碼 發布:2024-11-26 20:30:11 瀏覽:14
linux編碼命令 發布:2024-11-26 20:23:13 瀏覽:801
密碼加密工具 發布:2024-11-26 20:23:06 瀏覽:691
如何破解加密的wifi 發布:2024-11-26 20:10:29 瀏覽:430
c腳本檢查 發布:2024-11-26 19:56:34 瀏覽:394
伺服器ip控制系統叫什麼 發布:2024-11-26 19:56:31 瀏覽:747
ecshop文件夾許可權 發布:2024-11-26 19:55:05 瀏覽:74
編程123 發布:2024-11-26 19:52:52 瀏覽:950
python數組排序排序演算法 發布:2024-11-26 19:50:16 瀏覽:970
如保編程 發布:2024-11-26 19:29:58 瀏覽:812