Python, 創建一個 TCP 伺服器

Python 標準庫提供了 socketserver 套件,我們可以使用它來創建一個 TCP 伺服器。 from socketserver import BaseRequestHandler, TCPServer class handler(BaseRequestHandler): def handle(self): while True: msg = self.request.recv(1024) if msg == b'quit\n': break self.request.send(b'Message received: ' + msg) with TCPServer(('', 8000), handler) as server: server.serve\_forever() 使用 Netcat 連接到這個伺服器,Netcat 是一個很方便的工具,非常適合用來測試 TCP 和 UDP 伺服器。它默認安裝在 Linux 和 macOS 上,在 nc 命令下可用: nc localhost 8000 連接到伺服器後,您可以通過輸入消息來向其發送任何消息。伺服器將回復一則確認收到消息的回應。 除非您輸入 quit,否則連接將關閉(但伺服器仍然運行,您可以再次連接)。

Python, 讀取文件的內容

要讀取文件的內容,首先需要使用 open() 全局函數打開它,該函數接受兩個參數:文件路徑和模式。 如果要進行讀取操作,可以使用 read(r)模式: filename = '/Users/flavio/test.txt' file = open(filename, 'r') #或者 file = open(filename, mode='r') 一旦打開文件,就可以使用 read() 方法將文件的整個內容讀取為一個字串: content = file.read() 也可以選擇逐行讀取內容: line = file.readline() 通常可以與迴圈結合使用,例如逐行讀取並將每行添加到列表中: filename = '/Users/flavio/test.txt' file = open(filename, 'r') while True: line = file.readline() if line == '': break print(line) 文件處理結束後,記得關閉文件: file.close()

Python,`with`語句

with語句在處理異常時非常有用。 例如,在使用文件時,每次打開文件後都要記得關閉。 with可以使這個過程變得透明。 不用寫下面的代碼了: filename = '/Users/flavio/test.txt' try: file = open(filename, 'r') content = file.read() print(content) finally: file.close() 你可以這樣寫代碼: filename = '/Users/flavio/test.txt' with open(filename, 'r') as file: content = file.read() print(content) 換句話說,我們內置了隱式的異常處理,因為close()會自動為我們調用。 with不僅僅是用於處理文件。上面的例子只是為了介紹它的功能。

Python,創建網路請求

Python提供了urllib標準庫包來創建網路請求。 使用以下代碼創建請求: from urllib import request url = 'https://dog.ceo/api/breeds/list/all' response = request.urlopen(url) content = response.read() print(content) 你也可以使用with語句來簡化: from urllib import request url = 'https://dog.ceo/api/breeds/list/all' with request.urlopen(url) as response: content = response.read() print(content) 響應是一個字節序列,你會注意到響應被包裹在b''字符串中: b'{"message":{"affenpinscher":[],"african":[],"airedale":[],"akita":[],"appenzeller":[],"australian":["shepherd"],"basenji":[],"beagle":[],"bluetick":[],"borzoi":[],"bouvier":[],"boxer":[],"brabancon":[],"briard":[],"buhund":["norwegian"],"bulldog":["boston","english","french"]},"status":"success"}' 使用content.decode('utf-8')將其解碼為UTF-8編碼的字符串。 這裡是從我的網站flavicopes.com獲取HTML內容的例子: from urllib import request url = 'https://flaviocopes.com' with request.urlopen(url) as response: content = response.read().decode('utf-8') print(content) 你可以使用json標準庫模塊將響應解析為JSON: from urllib import request import json url = 'https://dog.ceo/api/breeds/list/all' with request.urlopen(url) as response: content = response.read() data = json....

Python,如何列出目錄中的文件和文件夾

要列出目錄中的文件,可以使用內置模組 os 提供的 listdir() 方法: import os dirname = '/users/Flavio/dev' files = os.listdir(dirname) print(files) 要獲取文件的完整路徑,可以使用 os.path.join() 方法將文件夾的路徑與文件名結合起來: import os dirname = '/users/Flavio/dev' files = os.listdir(dirname) temp = map(lambda name: os.path.join(dirname, name), files) print(list(temp)) 要僅列出文件或僅列出文件夾,可以使用 os.path.isfile() 和 os.path.isdir() 方法: import os dirname = '/users/Flavio/dev' dirfiles = os.listdir(dirname) fullpaths = map(lambda name: os.path.join(dirname, name), dirfiles) dirs = [] files = [] for file in fullpaths: if os.path.isdir(file): dirs.append(file) if os.path.isfile(file): files.append(file) print(list(dirs)) print(list(files))

Python,如何创建目录

要创建目录,请使用os标准库模块提供的os.mkdir()方法: import os dirname = '/Users/flavio/test' os.mkdir(dirname) 创建目录可能会引发OSError异常,例如,如果磁盘已满或目录已经存在,因此我们使用try块来捕获并优雅地处理问题,通过打印错误消息: import os dirname = '/Users/flavio/test' try: os.mkdir(dirname) except OSError: print('无法创建目录') else: print('目录已创建')

Python,如何檢查檔案或目錄是否存在

Python的標準函式庫模組os提供了os.path.exists()方法,該方法可以檢查檔案是否存在,如果存在則返回True,否則返回False。 以下是使用方法: import os filename = '/Users/flavio/test.txt' exists = os.path.exists(filename) print(exists) # True

Python,接受命令行參數

Python 提供了幾種處理從命令行調用程序時傳遞的參數的方法。 到目前為止,您已經從 REPL 運行程序,或者使用以下方式: python <filename>.py 當這樣做時,您可以傳遞額外的參數和選項,例如: python <filename>.py <argument1> python <filename>.py <argument1> <argument2> 處理這些參數的一種基本方式是使用標準庫中的 sys 模塊。 您可以獲取在 sys.argv 列表中傳遞的參數: import sys print(len(sys.argv)) print(sys.argv) sys.argv 列表的第一個元素包含運行的文件名,例如 ['main.py']。 這是一種簡單的方式,但是您需要做很多工作。您需要驗證參數,確保它們的類型正確,需要在用戶未正確使用程序時向其提供反饋。 Python 還提供了另一個幫助您的標準庫包:argparse。 首先,您導入 argparse,並呼叫 argparse.ArgumentParser(),並傳遞程序的描述: import argparse parser = argparse.ArgumentParser( description='This program prints the name of my dogs' ) 然後,您繼續添加要接受的參數。例如,在這個程序中,我們使用 -c 選項來傳遞一種顏色,像這樣:python program.py -c red import argparse parser = argparse.ArgumentParser( description='This program prints a color HEX value' ) parser.add_argument('-c', '--color', metavar='color', required=True, help='the color to search for') args = parser....

Python,接受輸入

在 Python 命令列應用程式中,您可以使用 print() 函數向使用者顯示資訊: name = "Roger" print(name) 我們也可以從使用者接受輸入,使用 input() 函數: print('你的年齡是多少?') age = input() print('你的年齡是 ' + age) 這種方式在執行時接受輸入,意味著程式會停止執行,並等到使用者輸入並按下 “enter” 鍵。 您還可以進一步處理輸入並在程式啟動時接受輸入。我們稍後會看到如何處理。 這種方法適用於命令列應用程式。其他類型的應用程式會需要不同的方式來接受輸入。

Python三元運算子

在Python中,三元運算子可以讓你快速定義一個條件。 假設你有一個函數,它將一個 age 變數與值 18 進行比較,根據結果返回True或False。 與其這樣寫: def is_adult(age): if age > 18: return True else: return False 你可以使用三元運算子這樣實現: def is_adult(age): return True if age > 18 else False 首先,你定義了條件為True時的結果,然後評估條件,最後定義了條件為False時的結果: <result_if_true> if <condition> else <result_if_false>