摘要:同時無論在哪種平臺上,都可以用進行系統編程。這樣導入模塊并使用生成隨機數中的模塊提供了生成隨機數的函數。生成的隨機數介于和之間。可以從自己定義的范圍中生成一個隨機數,如下所示操作日期和時間你可以從日期中提取所需的值,如下所示。
翻譯:瘋狂的技術宅
https://likegeeks.com/python-...
本文首發微信公眾號:前端先鋒
歡迎關注,每天都給你推送新鮮的前端技術文章
Python是一種非常流行的腳本語言,而且功能非常強大,幾乎可以做任何事情,比如爬蟲、網絡工具、科學計算、樹莓派、Web開發、游戲等各方面都可以派上用場。同時無論在哪種平臺上,都可以用 Python 進行系統編程。
機器學習可以用一些 Python 庫來實現,比如人工智能常用的TensorFlow。也可以用像 NLTK 這樣的 Python 庫進行自然語言處理(NLP)。
本文討論基本的 Python 編程,后續會寫一些 Python 編程的實際案例。
操作字符串Python 中的字符串是不可變的,所以不能直接修改。對字符串內容的任何更改都需要產生新的副本。
在 Python 中處理字符串非常簡單。
str = "welcome " + "to Python" print (str)
這是字符串連接,你也可以對字符串做乘法操作:
重復字符串str = "Python" * 2 print (str)與非字符串拼接
可以用 str() 函數將非字符串的值轉換為字符串,然后再連接,如下所示:
str = "This is test number " + str(15) print (str)搜索子字符串
可以使用 find() 方法搜索子字符串,如下所示:
str = "welcome to Python" print(str.find("Python"))
如果找到了字符串"Python",則 find 方法會返回第一次出現這個字符串的位置。
如果沒有找到,則返回 -1。
find 函數默認從第一個字符開始搜索,也可以從第n個字符開始,如下所示:
str = "welcome to Python" print(str.find("Python",12))
因為我們從第12個字符開始,所以找不到 Python 這個單詞,所以它會返回 -1。
獲取子字符串所以我們得到了我們要搜索的字符串的索引,現在我們要打印匹配的字符串。
你可以按索輸出印字符串,如下所示:
str = "first second third" print(str[:2]) print(str[2:]) print(str[3:5]) print(str[-1])
在第 2 行的代碼會打印第一個和第二個字符,而第 3 行會從第二個字符開始打印到結束。要注意代碼中結冒號的位置。字符串從 0 開始計數。
如果使用負數,則會從最后開始計數。第 5 行代碼會打印最后一個字符。
你可以用如下方法替換字符串:
str = "This website is about programming" str2 = str.replace("This", "That") print(str2)
如果你想替換的字符串多次出現,但是只想替換第一次出現的,可以指定位置:
str = "This website is about programming I like this website" str2 = str.replace("website", "page",1) print(str2)
第一個詞只被替換了。
去除字符串兩端的空格可以用 strip 方法去掉字符串兩端的空格,如下所示:
str = " This website is about programming " print(str.strip())
你可以用rstrip僅去除最右的空格,或者用 lstrip 去除最左邊的空格。
改變字符大小寫在某些情況下你可能需要改變字符的大小寫。
str="Welcome to likegeeks" print(str.upper()) print(str.lower())將字符串轉換為數字
前面學到了用 str()函數將數字轉為字符串,但這不是 Python 中唯一的轉換函數,另外還有 int() 、float()、long()和其他強制轉換函數。
int() 可以把輸入的字符串轉為整數,float() 函數將字符串轉為float。
str="10" str2="20" print(str+str2) print(int(str)+int(str2))
第 3 行只是連接兩個字符串,而第 4 行把兩個值相加并輸出結果。
字符串計數可以用min()找到字符串中 ASCII 值最小的字符,max()找到最大的字符,用len()函數得到字符的總長度。
str="welcome to Python" print(min(str)) print(max(str)) print(len(str))迭代字符串
可以用 for 迭代字符串并多帶帶操作每個字符,如下所示:
str="welcome to likegeeks website" for i in range(len(str)): print(str[i])
其中 len() 函數用來得到字符串的長度。
字符串編碼如果你使用的是Python 3,默認情況下所有字符都是 Unicode 字符集編碼,但是如果用的是Python 2,可能需要對字符串進行編碼,如下所示:
str="welcome to Python" str.encode("utf-8")操作數字
在 Python 中定義數字變量的方式如下:
a=15
可以定義整數,也可以定義浮點數。
浮點數可以用 int()函數進行舍入,如下所示:
a=15.5 print(int(a))舍入數字
可以用 round() 函數對數字進行舍入:
a=15.5652645 print(round(a,2))
只需指定需要舍入到小數點后幾位。
自定義精度的數字很多情況下會用到自定義精度的浮點數。
可以處理用戶自定義精度數的 decimal 模塊。
這樣導入模塊并使用:
from decimal import * a=Decimal(5.5)生成隨機數
Python 中的 random 模塊提供了生成隨機數的函數。
import random print(random.random())
生成的隨機數介于 0.0 和 1.0 之間。
可以從自己定義的范圍中生成一個隨機數,如下所示:
import random numbers=[1,2,3,4,5,6,7] print(random.choices(numbers))操作日期和時間
你可以從日期中提取所需的值,如下所示。
import datetime cur_date = datetime.datetime.now() print(cur_date) print(cur_date.year) print(cur_date.day) print(cur_date.weekday()) print(cur_date.month) print(cur_date.time())
可以得到兩個時間或日期之間的差,如下所示:
import datetime time1 = datetime.datetime.now() time2 = datetime.datetime.now() timediff = time2 - time1 print(timediff.microseconds())
上例中的 timediff 變量是 timedelta 類型的對象,你也可以自己創建這種對象:
time1 = datetime.datetime.now() time2 = datetime.timedelta(days=3) time3=time1+time2 print(time3.date())格式化日期和時間
可以用 strftime() 格式化日期或時間。
下表指定了一些常用的格式選項:
%y 兩位數的年份表示(00-99)
%Y 四位數的年份表示(000-9999)
%m 月份(01-12)
%d 月內中的一天(0-31)
%H 24小時制小時數(0-23)
%I 12小時制小時數(01-12)
%M 分鐘數(00=59)
%S 秒(00-59)
%a 本地簡化星期名稱
%A 本地完整星期名稱
%b 本地簡化的月份名稱
%B 本地完整的月份名稱
%c 本地相應的日期表示和時間表示
%j 年內的一天(001-366)
%p 本地A.M.或P.M.的等價符
%U 一年中的星期數(00-53)星期天為星期的開始
%w 星期(0-6),星期天為星期的開始
%W 一年中的星期數(00-53)星期一為星期的開始
%x 本地相應的日期表示
%X 本地相應的時間表示
%Z 當前時區的名稱
%% %號本身
import datetime date1 = datetime.datetime.now() print(date1.strftime("%d. %B %Y %I:%M%p"))從字符串創建日期
可以用 strptime()函數從字符串創建日期,如下所示:
date1=datetime.datetime.strptime(“2015-11-21”, “%Y-%m-%d”)
也可以像這樣創建:
date1= datetime.datetime(year=2015, month=11, day=21)
處理文件系統在 Python 中處理文件非常容易,不管你信不信,在所欲語言中是是最簡單的。當然你也可以說 Python 是一種做什么事情都最簡單的語言。
復制文件shutil 模塊中包含用于復制文件的功能。
import shutil copied_path = shutil.copy("my_file.txt", "copied_file.txt")
如果 my_file.txt 是一個軟連接的話,那么上面的代碼將會把 copied_file.txt 創建為獨立的文件。
你也可以創建一個軟鏈接的副本,如下所示:
copied_path = shutil.copy("my_file.txt", "copied_file.txt",follow_symlinks=False)
移動文件你可以像這樣移動一個文件:
import shutil shutil.move("file1.txt", "file3.txt")
也可以使用 os 模塊中的 rename 函數重命名文件,如下所示:
import os os.rename("file1.txt", "file3.txt")讀寫文本文件
可以用 open 函數打開文件,然后再用 read 或write 方法進行讀寫。
fd = open("file1.txt") content = fd.read() print(content)
首先,使用 open 函數打開文件并讀取,然后我再用 read 函數讀取文件內容,最后,將得到的內容放入變量 content 中。
你可以指定 read()()函數讀取的字節數:
fd.read(20)
如果文件不是太大的話,你可以將整個內容讀入一個列表,然后再遍歷列表打印輸出。
content = fd.readlines() print(content[0])
可以通過指定打開的模式來寫入文件。有兩種寫入模式,即寫入模式和追加模式。
下面是寫入模式,會覆蓋掉文件中的舊內容。
fd = open("file1.txt","w") content = fd.write("YOUR CONTENT GOES HERE")
下面是附加模式:
fd = open("file1.txt","a") content = fd.write("YOUR CONTENT GOES HERE")創建目錄
可以用 os模塊中的 mkdir 函數創建一個新目錄,如下所示:
import os os.mkdir("./NewFolder)
如果目錄已經存在將會引發錯誤。不過不用擔心,在以后的文章中會討論異常處理,可以幫你避免此類錯誤。
獲取訪問和修改以及創建時間可以用 getmtime()、 getatime() 和 getctime() 分別獲取修改時間、訪問時間和創建時間。
返回的時間格式為 Unix 時間戳,我們可以把它轉換為人類可讀的格式,如下所示:
import os import datetime tim=os.path.getctime("./file1.txt") print(datetime.datetime.fromtimestamp(tim))迭代文件
你可以用 os 模塊中的 listdir() 函數來獲取文件:
import os files = os.listdir(".") print(files)
此外,你可以用 glob 模塊執行相同的操作:
import glob files = glob.glob("*") print(files)
你可以為 glob()設定任何一種擴展名,例如設定為 * .doc 獲取所有word文檔。
序列化Python對象此過程用于將 Python 對象序列化為字節流,以便以后重用。
你可以用 pickle 模塊做到這一點:
import pickle fd = open("myfile.pk ", "wb") pickle.dump(mydata,fd)
可以用 load() 函數反序列化此數據,如下所示:
import pickle fd = open("myfile.pk ", "rb") mydata = pickle.load(fd)壓縮文件
Python 標準庫使你可以處理不同格式的壓縮文件,如tar,zip,gzip,bzip2。
要處理 zip文件,你可以使用 zipfile模塊:
import zipfile my_zip = zipfile.ZipFile("zipped_file.zip", mode="r") print(file.namelist())
你可以把一個文件壓縮成 zip 格式,如下所示:
import zipfile file=zipfile.ZipFile("files.zip","w") file.write("file1.txt") file.close()
可以用 extractall() 方法提取 zip 壓縮包中的文件:
import zipfile file=zipfile.ZipFile("files.zip","r") file.extractall() file.close()
另外還可以用附加模式將文件附加到現有的zip文件,如下所示:
import zipfile file=zipfile.ZipFile("files.zip","a") file.write("file2.txt") file.close()
在處理 gz 或 bz 文件時,可以用和上面相同的套路。不過要導入 gzip 模塊或 bz2 模塊。
import gzip import bz2 gz_file=gzip.GzipFile("files.gz","r") bz_file=bz2.BZ2File("fiels.bz2","r")
然后用同樣的方式讀寫。
你可以使用 unrar 包處理rar文件。首先,安裝包:
pip install unrar
然后用同樣的方式使用。
import unrar.rarfile m=unrar.rarfile.RarFile("file.rar") m.namelist() m.extractall()解析CSV文件
一個非常有用的包叫做 pandas。它可以解析 CSV 和 Excel 文件,并輕松地從中提取數據。
首先,安裝包
pip install pandas
然后你可以在自己的代碼中使用它,如下所示:
import pandas data=pandas.read_csv("file.csv)
默認情況下,Pandas 將第一列視為每行的標簽。如果列索引不是第一列,則可以通過傳遞 index_col 參數來指定列索引。
如果文檔中沒有行標簽,則應使用參數 index_col = False。
要寫入CSV文件,可以使用 to_csv() 方法。
data.to_csv("file.csv)
解析Excel文件可以用 pandas 模塊中的 read_excel() 方法來解析excel文件。
data = pd.read_excel("file.xls", sheetname="Sheet1")
如果有多個工作表,可以這樣加載:
ta = pd.ExcelFile("file.xls")
這樣寫入excel文件:
ta.to_excel("file.xls", sheet="Sheet1")
網絡和連接Python 有一個 socket 類,它提供了一種通過低級 API 訪問網絡的方法,它支持許多網絡協議。
import socket host = "192.168.1.5" port = 5050 m_sock = socket.create_connection ((host, port))
這段代碼與 IP 地址為 192.168.1.5 的主機通過 5050 端口建立連接。
打開 socket 后,就可以發送和接收數據了。
m_sock.sendall(b"Hello World")
注意,我在字符串之前使用了 b 字符,因為數據需要是字節字符串。
如果發送的數據太大,你應該通過循環分割并發送,如下所示:
msg = b"Longer Message Goes Here" mesglen = len(msg) total = 0 while total < msglen: sent = m_sock.send(msg[total:]) total = total + sent
要接收數據,你需要告訴 recv() 方法一次讀入多少個字節。
data_in = m_sock.recv(2000)
這是有效的,因為你能夠確定發送的消息長度小于2000個字節。
如果消息很大,則必須反復循環,直到收到所有的數據塊。
buffer = bytearray(b" " * 2000) m_sock.recv_into(buffer)
在這里定義了一個空緩沖區,然后將消息寫入緩沖區。
從POP郵件服務器接收電子郵件poplib 模塊使你可以與 POP 服務器進行通信。
import getpass,poplib pop_serv = poplib.POP3("192.168.1.5") pop_serv.user("myuser") pop_serv.pass_(getpass.getpass())
getpass 模塊可以安全地處理密碼。
如果需要安全連接,可以用 POP3_SSL 類。
要獲取郵件列表和郵件計數,可以這樣做:
msg_list = pop_serv.list() # to list the messages msg_count = pop_serv.msg_count() # to get message count
處理完畢后,一定要記得關閉所有打開的連接。
pop_serv.quit()
從IMAP郵件服務器接收電子郵件可以用 imaplib 模塊與 IMAP 郵件服務器通信。
import imaplib, getpass my_imap = imaplib.IMAP4("imap.server.com") my_imap.login("myuser", getpass.getpass())
如果你的 IMAP 服務器上使用 SSL,則應用 IMAP4_SSL 類。
要獲取電子郵件列表,需要先執行查詢操作:
data = my_imap.search(None, "ALL")
然后,通過迭代 data 變量中的郵件索引獲取郵件內容
msg = my_imap.fetch(email_id, "(RFC822)")
最后,不要忘記關閉連接:
my_imap.close() my_imap.logout()發送電子郵件
想要通過 SMTP 協議發送電子郵件。可以用 smtplib 。
import smtplib, getpass my_smtp = smtplib.SMTP(smtp.server.com") my_smtp.login("myuser", getpass.getpass())
如果在 SMTP服務器上使用SSL,則應用 SMTP_SSL 類。
打開連接后,你可以這樣發送郵件:
from_addr = "me@example.com" to_addr = "you@example.com" msg = "From: me@example.com To: you@example.com Hello, this is a test message" my_smtp.sendmail(from_addr, to_addr, msg)抓取網頁
要與Web服務器進行通信,需要用到 urllib.request 子模塊。
import urllib.request my_web = urllib.request.urlopen("https://www.google.com") print(my_web.read())提交 Web 表單
如果你想要提交 Web 表單,應該向網頁發送POST請求。
import urllib.request my_data = b"Your Data Goes Here" my_req = urllib.request.Request("http://localhost", data=my_data,method="POST") my_frm = urllib.request.urlopen(my_req) print(my_frm.status)
另外還可以用 mechanize 或 urllib2 模塊,還有很多方法可以實現這個功能。
創建一個微型服務器socket 類支持偵聽連接請求。
import socket host = "" port = 3535 my_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) my_server.bind((host, port)) my_server.listen(1)
現在你可以接受這樣的連接請求:
addr = my_server.accept() print("Connected ... ", addr) data = conn.recv(1024)
最后不要忘記在操作完成后關閉連接
conn.close()
Python 中的線程并發運行任務是非常有用的,Python 有一個名為 threading 的模塊,它包含一個 Thread 類。
import threading def print_message(): print("The message got printed from a different thread") my_thread = threading.Thread(target=print_message) my_thread.start()
如果函數需要很長時間才能完成,可以用 is_alive()方法檢查它是否仍在運行。
有時你的線程需要安全地訪問全局資源。這時候就需要用到鎖。
import threading num = 1 my_lock = threading.Lock() def my_func(): global num, my_lock my_lock.acquire() sum = num + 1 print(sum) my_lock.release() my_thread = threading.Thread(target=my_func) my_thread.start()使用樹莓派
使用樹莓派是一種價格便宜的單板電腦,可以在上面開發各種有趣的應用。
可以用 Python 的 RPi.GPIO 模塊使樹莓派與外接的傳感器通信。
首先,在你的樹莓派中安裝包,如下所示:
$ sudo apt-get install python-dev python-rpi.gpio
然后你就能在Python腳本中使用它了。可以在樹莓派的 GPIO 總線上寫輸出:
import RPi.GPIO as GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(1, GPIO.OUT, initial=GPIO.LOW) GPIO.output(1, GPIO.HIGH)通過樹莓派的GPIO中讀取數據
你可以用 RPi.GPIO 模塊從 GPIO 接口讀取數據,如下所示:
import RPi.GPIO RPi.GPIO.setup(1, GPIO.IN) if RPi.GPIO.input(1): print("Input was HIGH") else: print("Input was LOW")
以上只是 Python 的一小部分基礎知識,還有很長的路需要走。
實際上,我們已經介紹了一小部分Python,還有很多內容需要介紹。將來會有更多的文章來幫助大家學習 Python 這種充滿魅力的語言,請關注我。
12個令人驚嘆的CSS實驗項目
必須要會的 50 個React 面試題
世界頂級公司的前端面試都問些什么
11 個最好的 JavaScript 動態效果庫
CSS Flexbox 可視化手冊
從設計者的角度看 React
過節很無聊?還是用 JavaScript 寫一個腦力小游戲吧!
CSS粘性定位是怎樣工作的
一步步教你用HTML5 SVG實現動畫效果
程序員30歲前月薪達不到30K,該何去何從
14個最好的 JavaScript 數據可視化庫
8 個給前端的頂級 VS Code 擴展插件
Node.js 多線程完全指南
把HTML轉成PDF的4個方案及實現
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/43563.html
前言 最近,我在群里答疑的時候,經常碰到,小伙伴,再變量,縮進,參數,方面使用錯誤,導致程序運行不來。 今天,打算自己寫一篇。 Python 變量作用域,和生命周期。 徹底弄懂變量該怎么使用。 知識點 變量的使用,有作用域區別,也有生命周期的區別。 1.變量作用域 局部變量 python能夠影響變量作用域的代碼段是def、class、lamda。 def scopeTest(): local...
摘要:你打了個響指然后開始致力于你想寫的棒極了的網絡應用程序你寫完一些頁面最后你需要著手處理令人討厭的任務處理和驗證表單輸入進入開始但是為什么我需要另一個框架呢好吧一些網絡應用程序框架采用數據庫模型和表單處理相結合的方法同時這對很基本的創建更新視 你打了個響指, 然后開始致力于你想寫的棒極了的 Python 網絡應用程序. 你寫完一些頁面, 最后你需要著手處理令人討厭的任務:處理和驗證表單輸...
摘要:語言行為及特征狀態看不懂任何英語技術,英語文檔,凡事沒有培訓部在搞的,只有英文文檔的東西國內一律沒大公司在用,都非主流,排斥英文文檔和新技術,以及各種超出他學習能力范圍的技術。 在撰寫此文前首先必須申明的是本人不鄙視任何一種框架,也無意于挑起PHP框架間的戰爭,更沒有貶低某個框架使用者的用意,本文純粹個人的看法。你可以認為我無知也好,或者裝逼也好,請不要試著在任何情況下,隨便發起言語的...
摘要:內容如下是我們準備爬的初始頁這個是解析函數,如果不特別指明的話,抓回來的頁面會由這個函數進行解析。爬取多個頁面的原理相同,注意解析翻頁的地址設定終止條件指定好對應的頁面解析函數即可。后面的數字表示的是優先級。指明每兩個請求之間的間隔。 序 本文主要內容:以最短的時間寫一個最簡單的爬蟲,可以抓取論壇的帖子標題和帖子內容。 本文受眾:沒寫過爬蟲的萌新。 入門 0.準備工作 需要準備的東西:...
閱讀 2924·2021-11-23 09:51
閱讀 3099·2021-11-15 11:39
閱讀 2979·2021-11-09 09:47
閱讀 2527·2019-08-30 13:49
閱讀 2113·2019-08-30 13:09
閱讀 3092·2019-08-29 16:10
閱讀 3504·2019-08-26 17:04
閱讀 984·2019-08-26 13:57