Python高效實(shí)現(xiàn)讀寫文件和處理CSV/JSON詳解
適合讀者:掌握了函數(shù)和列表字典的 Python 入門開發(fā)者
一個(gè) 10 萬(wàn)行的 Nginx 訪問(wèn)日志,篩出所有狀態(tài)碼為 500 的請(qǐng)求行,按 URL 分組統(tǒng)計(jì)次數(shù),再把結(jié)果寫成 JSON 報(bào)告——不用 Excel,不用數(shù)據(jù)庫(kù),一個(gè) Python 腳本搞定,運(yùn)行時(shí)間不到一秒。
這就是文件操作的實(shí)際價(jià)值所在。數(shù)據(jù)不可能永遠(yuǎn)活在內(nèi)存里,程序的輸入來(lái)自文件,輸出也要寫回文件,兩者之間的這段代碼就是文件操作的核心。
本篇用一個(gè)日志分析器作為貫穿場(chǎng)景,從最基礎(chǔ)的 open() 函數(shù)講起,覆蓋文本讀寫、CSV、JSON、路徑處理,以及幾個(gè)在生產(chǎn)代碼里真正會(huì)踩的坑。
一、文件讀寫基礎(chǔ)
1.1 open() 函數(shù)與三種模式
Python 用內(nèi)置的 open() 函數(shù)打開文件,最重要的兩個(gè)參數(shù)是路徑和模式:
# 讀取文件(默認(rèn)模式,文件不存在會(huì)報(bào) FileNotFoundError)
file = open("access.log", "r")
# 寫入文件(會(huì)覆蓋原有內(nèi)容,文件不存在則創(chuàng)建)
file = open("output.txt", "w")
# 追加內(nèi)容(不覆蓋,在原有內(nèi)容末尾繼續(xù)寫)
file = open("output.txt", "a")
三種模式的行為差異:
| 模式 | 文件存在 | 文件不存在 | 常見(jiàn)場(chǎng)景 |
|---|---|---|---|
"r" | 正常打開 | 報(bào) FileNotFoundError | 讀取配置、日志 |
"w" | 清空重寫 | 自動(dòng)創(chuàng)建 | 生成報(bào)告、輸出結(jié)果 |
"a" | 追加寫入 | 自動(dòng)創(chuàng)建 | 追加日志、增量輸出 |
處理二進(jìn)制文件:圖片、PDF 等二進(jìn)制文件需要加 "b" 模式(如 "rb", "wb"),本篇聚焦文本文件。
1.2 with open():正確的文件打開姿勢(shì)
手動(dòng) open() 的問(wèn)題是:如果讀取過(guò)程中程序崩潰,文件句柄就不會(huì)被關(guān)閉,長(zhǎng)期運(yùn)行的程序會(huì)耗盡系統(tǒng)的文件描述符。
with 語(yǔ)句解決了這個(gè)問(wèn)題:
# 推薦寫法:with 語(yǔ)句保證文件一定被關(guān)閉
with open("access.log", "r", encoding="utf-8") as f:
content = f.read()
# 離開 with 代碼塊后,f 自動(dòng)關(guān)閉,無(wú)論是否有異常
# 不推薦寫法:需要手動(dòng) close(),一旦出錯(cuò)容易忘記
f = open("access.log", "r", encoding="utf-8")
content = f.read()
f.close() # 如果 read() 出錯(cuò),這行就執(zhí)行不到
with 語(yǔ)句背后用的是 Python 的上下文管理器協(xié)議——文件對(duì)象實(shí)現(xiàn)了 __enter__ 和 __exit__ 方法,with 塊結(jié)束時(shí)會(huì)自動(dòng)調(diào)用 __exit__,無(wú)論是否發(fā)生異常都會(huì)執(zhí)行關(guān)閉操作。
encoding 參數(shù)不要省略:不同操作系統(tǒng)的默認(rèn)編碼不同(Windows 是 GBK,Linux/macOS 是 UTF-8),省略 encoding 會(huì)導(dǎo)致代碼在不同環(huán)境下行為不一致。
1.3 四種讀取方式:如何選擇
打開文件之后,有四種方式讀取內(nèi)容,選錯(cuò)了會(huì)直接影響內(nèi)存占用:
with open("access.log", "r", encoding="utf-8") as f:
# 方式1:read() — 一次性讀取全部?jī)?nèi)容,返回字符串
content = f.read()
# 適合:小文件(< 幾十 MB),需要整體處理
# 方式2:readline() — 每次讀取一行,返回字符串(含 \n)
line = f.readline()
# 適合:需要手動(dòng)控制讀取進(jìn)度的場(chǎng)景
# 方式3:readlines() — 一次性讀取所有行,返回列表
lines = f.readlines()
# 適合:小文件,需要按行處理并保留所有行
# 方式4:for line in f — 逐行迭代(推薦)
for line in f:
process(line)
# 適合:大文件(按需讀取,內(nèi)存友好)
內(nèi)存開銷對(duì)比:

實(shí)際經(jīng)驗(yàn):一個(gè) 500MB 的日志文件,read() 需要占用約 500MB 內(nèi)存,for line in f 的內(nèi)存占用始終不超過(guò)一行的大?。ㄍǔ装僮止?jié))。
二、寫入文件
2.1 write() 與 writelines()
# write():寫入一個(gè)字符串,返回寫入的字符數(shù)
with open("output.txt", "w", encoding="utf-8") as f:
f.write("第一行\(zhòng)n") # \n 換行符需要手動(dòng)添加
f.write("第二行\(zhòng)n")
count = f.write("第三行\(zhòng)n")
print(count) # 輸出寫入的字符數(shù)
# writelines():寫入字符串列表,不自動(dòng)添加換行符
lines = ["第一行\(zhòng)n", "第二行\(zhòng)n", "第三行\(zhòng)n"]
with open("output.txt", "w", encoding="utf-8") as f:
f.writelines(lines)
兩者的區(qū)別只有一個(gè):writelines() 接受可迭代對(duì)象,但不會(huì)自動(dòng)在每個(gè)元素后面添加換行符,換行符需要包含在每個(gè)字符串里。
2.2 追加寫入
"a" 模式在文件末尾繼續(xù)寫入,不覆蓋原有內(nèi)容:
def append_log(message):
"""追加一條日志記錄"""
import datetime
timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open("app.log", "a", encoding="utf-8") as f:
f.write(f"[{timestamp}] {message}\n")
append_log("用戶登錄成功")
append_log("查詢請(qǐng)求處理完成")
# 每次調(diào)用都在 app.log 末尾追加一行
三、CSV 文件讀寫
CSV(Comma-Separated Values)是最常見(jiàn)的表格數(shù)據(jù)格式,Python 內(nèi)置了 csv 模塊處理它。
3.1 讀取 CSV
import csv
# 讀取 CSV 文件,每行返回一個(gè)列表
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.reader(f)
header = next(reader) # 第一行通常是表頭
print("字段名:", header) # ['姓名', '分?jǐn)?shù)', '班級(jí)']
for row in reader:
print(row) # ['張三', '92', '高一甲班']
更推薦的方式是用 DictReader,把每行轉(zhuǎn)成字典,直接用字段名取值:
import csv
with open("students.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
# row 是一個(gè)字典:{'姓名': '張三', '分?jǐn)?shù)': '92', '班級(jí)': '高一甲班'}
name = row["姓名"]
score = int(row["分?jǐn)?shù)"]) # CSV 里數(shù)字是字符串,需要手動(dòng)轉(zhuǎn)換
print(f"{name}: {score} 分")
3.2 寫入 CSV
import csv
students = [
{"姓名": "張三", "分?jǐn)?shù)": 92, "班級(jí)": "高一甲班"},
{"姓名": "李四", "分?jǐn)?shù)": 87, "班級(jí)": "高一乙班"},
{"姓名": "王五", "分?jǐn)?shù)": 95, "班級(jí)": "高一甲班"},
]
with open("output.csv", "w", encoding="utf-8-sig", newline="") as f:
fieldnames = ["姓名", "分?jǐn)?shù)", "班級(jí)"]
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader() # 寫入表頭行
writer.writerows(students)
3.3 編碼坑:utf-8 vs utf-8-sig
這是 CSV 處理最常見(jiàn)的坑:
# 寫入時(shí)用 utf-8
with open("output.csv", "w", encoding="utf-8") as f:
writer = csv.writer(f)
writer.writerow(["姓名", "分?jǐn)?shù)"])
# 用 Excel 打開:第一列顯示 "锘縿名" 或亂碼
# 寫入時(shí)用 utf-8-sig(BOM 標(biāo)記版本)
with open("output.csv", "w", encoding="utf-8-sig") as f:
writer = csv.writer(f)
writer.writerow(["姓名", "分?jǐn)?shù)"])
# 用 Excel 打開:正常顯示中文
原因:Excel 打開 CSV 文件時(shí)會(huì)檢查文件開頭是否有 BOM(Byte Order Mark,字節(jié)順序標(biāo)記)。utf-8-sig 編碼在文件開頭寫入 BOM(\xef\xbb\xbf),告訴 Excel 這是 UTF-8 文件,Excel 就能正確識(shí)別中文。
規(guī)則:
- 程序讀/寫,不涉及 Excel:用
utf-8 - 需要 Excel 打開中文 CSV:寫入用
utf-8-sig,讀取時(shí)utf-8和utf-8-sig都能正確讀取

四、JSON 文件讀寫
JSON 是 Web API 和配置文件的主流格式,Python 內(nèi)置 json 模塊處理它。
4.1 讀取 JSON(json.load)
import json
# 從文件讀取 JSON,自動(dòng)轉(zhuǎn)換為 Python 對(duì)象
with open("config.json", "r", encoding="utf-8") as f:
config = json.load(f)
# config 現(xiàn)在是 Python 字典或列表
print(config["database"]["host"]) # 像操作普通字典一樣
4.2 寫入 JSON(json.dump)
import json
report = {
"date": "2024-01-15",
"total_requests": 12453,
"error_count": 23,
"error_urls": ["/api/user/login", "/api/order/create"],
"success_rate": 99.82
}
with open("report.json", "w", encoding="utf-8") as f:
json.dump(
report,
f,
ensure_ascii=False, # 不把中文轉(zhuǎn)義成 \uXXXX,保持可讀性
indent=2 # 每級(jí)縮進(jìn) 2 個(gè)空格,文件更易讀
)
生成的 JSON 文件:
{
"date": "2024-01-15",
"total_requests": 12453,
"error_count": 23,
"error_urls": [
"/api/user/login",
"/api/order/create"
],
"success_rate": 99.82
}
4.3 Python 對(duì)象與 JSON 的類型對(duì)照
JSON 的類型系統(tǒng)比 Python 窄,寫入時(shí)會(huì)做自動(dòng)轉(zhuǎn)換:
| Python 類型 | JSON 格式 | 讀回 Python 的類型 |
|---|---|---|
dict | {} 對(duì)象 | dict |
list / tuple | [] 數(shù)組 | list |
str | "string" | str |
int / float | 數(shù)字 | int / float |
True / False | true / false | bool |
None | null | None |
set | ? 不支持 | — |
datetime | ? 不支持 | — |
常見(jiàn)坑:set 和 datetime 對(duì)象無(wú)法直接序列化為 JSON,需要手動(dòng)轉(zhuǎn)換(set → list,datetime → ISO 字符串):
import datetime, json
data = {
"tags": {"python", "backend"}, # set 類型
"created": datetime.datetime.now() # datetime 類型
}
# 直接 json.dump 會(huì)報(bào) TypeError
# 需要手動(dòng)轉(zhuǎn)換
data["tags"] = list(data["tags"])
data["created"] = data["created"].isoformat()
print(json.dumps(data))
# {"tags": ["python", "backend"], "created": "2024-01-15T10:30:00"}
五、路徑處理:pathlib 的現(xiàn)代寫法
路徑處理是文件操作的基礎(chǔ),傳統(tǒng)方式用 os.path 字符串拼接,Python 3.4+ 推出的 pathlib 模塊更加直觀。
5.1 pathlib 基本操作
from pathlib import Path
# 創(chuàng)建路徑對(duì)象
data_dir = Path("data")
log_file = data_dir / "access.log" # / 運(yùn)算符拼接路徑(自動(dòng)處理斜杠)
print(log_file) # data/access.log(或 data\access.log)
# 常用屬性
p = Path("/home/user/projects/app.log")
print(p.name) # app.log(文件名含擴(kuò)展名)
print(p.stem) # app(文件名不含擴(kuò)展名)
print(p.suffix) # .log(擴(kuò)展名)
print(p.parent) # /home/user/projects(父目錄)
# 檢查路徑狀態(tài)
print(p.exists()) # 是否存在
print(p.is_file()) # 是否是文件
print(p.is_dir()) # 是否是目錄
# 創(chuàng)建目錄(mkdir 和 parents=True 允許多級(jí)創(chuàng)建)
output_dir = Path("output/reports/2024")
output_dir.mkdir(parents=True, exist_ok=True) # exist_ok=True 已存在不報(bào)錯(cuò)
5.2 pathlib vs os.path 對(duì)比
import os
from pathlib import Path
# ———— 路徑拼接 ————
# os.path 寫法(字符串,跨平臺(tái)需要注意斜杠)
config_path = os.path.join("config", "settings", "dev.json")
# pathlib 寫法(/ 操作符,自動(dòng)處理跨平臺(tái))
config_path = Path("config") / "settings" / "dev.json"
# ———— 讀取文件內(nèi)容 ————
# os.path 寫法
with open(os.path.join("data", "users.json"), "r", encoding="utf-8") as f:
data = json.load(f)
# pathlib 寫法(直接在 Path 對(duì)象上調(diào)用 read_text)
data = json.loads(Path("data", "users.json").read_text(encoding="utf-8"))
# ———— 列出目錄下所有 .log 文件 ————
# os.path 寫法(需要 os.listdir + 過(guò)濾)
logs = [f for f in os.listdir("logs") if f.endswith(".log")]
# pathlib 寫法(glob 模式,更直觀)
logs = list(Path("logs").glob("*.log"))
# 遞歸查找所有子目錄的 .log 文件
all_logs = list(Path("logs").rglob("*.log"))
六、常見(jiàn)報(bào)錯(cuò)速查

| 報(bào)錯(cuò) | 典型原因 | 解決方法 |
|---|---|---|
FileNotFoundError | 路徑拼寫錯(cuò)誤,或文件被移動(dòng)/刪除 | 用 Path.exists() 先驗(yàn)證路徑;打印路徑確認(rèn) |
PermissionError | 文件被 Excel 等程序占用(Windows);或目錄權(quán)限不足 | 關(guān)閉占用程序;用管理員權(quán)限運(yùn)行 |
UnicodeDecodeError | 文件編碼與 encoding 參數(shù)不匹配 | 用 chardet 庫(kù)檢測(cè)編碼;常見(jiàn)的是 GBK vs UTF-8 |
UnicodeEncodeError | 寫入時(shí)文件編碼無(wú)法表示該字符 | 寫入用 utf-8 或 utf-8-sig |
StopIteration | next(reader) 但文件為空 | 先檢查文件是否有內(nèi)容 |
七、實(shí)戰(zhàn):日志分析器
7.1 日志格式說(shuō)明
標(biāo)準(zhǔn) Nginx 訪問(wèn)日志格式:
192.168.1.100 - - [15/Jan/2024:10:30:00 +0800] "GET /api/user/profile HTTP/1.1" 200 1234
192.168.1.101 - - [15/Jan/2024:10:30:01 +0800] "POST /api/order/create HTTP/1.1" 500 89
每行關(guān)鍵字段:IP 地址 / 時(shí)間戳 / HTTP 方法 + URL / 狀態(tài)碼 / 響應(yīng)大小
7.2 版本一:統(tǒng)計(jì)日志級(jí)別
先從一個(gè)更簡(jiǎn)單的場(chǎng)景入手——分析應(yīng)用日志,統(tǒng)計(jì) ERROR/WARNING/INFO 各出現(xiàn)多少次:
from pathlib import Path
def analyze_app_log(log_path):
"""
統(tǒng)計(jì)應(yīng)用日志中各級(jí)別的出現(xiàn)次數(shù)。
參數(shù):
log_path: 日志文件路徑(字符串或 Path 對(duì)象)
返回:
dict: {'ERROR': n, 'WARNING': n, 'INFO': n, 'UNKNOWN': n}
"""
log_path = Path(log_path)
if not log_path.exists():
print(f"日志文件不存在: {log_path}")
return {}
counts = {"ERROR": 0, "WARNING": 0, "INFO": 0, "UNKNOWN": 0}
with open(log_path, "r", encoding="utf-8") as f:
for line in f: # 逐行讀取,內(nèi)存友好
line = line.strip() # 去掉行首行尾空白和換行符
if not line: # 跳過(guò)空行
continue
# 判斷日志級(jí)別(日志格式通常包含 [ERROR] 或 ERROR:)
matched = False
for level in ["ERROR", "WARNING", "INFO"]:
if level in line:
counts[level] += 1
matched = True
break
if not matched:
counts["UNKNOWN"] += 1
return counts
# 使用示例
result = analyze_app_log("app.log")
for level, count in result.items():
print(f"{level:10s}: {count} 條")
輸出示例:
ERROR : 23 條
WARNING : 156 條
INFO : 8934 條
UNKNOWN : 0 條
7.3 版本二:分析 Nginx 訪問(wèn)日志,輸出 JSON 報(bào)告
import re
import json
from pathlib import Path
from collections import defaultdict
def parse_nginx_log_line(line):
"""
解析一行 Nginx 標(biāo)準(zhǔn)訪問(wèn)日志。
返回包含 ip / url / status / size 的字典,解析失敗返回 None。
"""
# 匹配標(biāo)準(zhǔn) Nginx combined 日志格式
pattern = r'(\S+) \S+ \S+ \[.*?\] "(\w+) (\S+) \S+" (\d+) (\d+)'
match = re.match(pattern, line)
if not match:
return None
return {
"ip": match.group(1),
"method": match.group(2),
"url": match.group(3),
"status": int(match.group(4)),
"size": int(match.group(5)),
}
def analyze_nginx_log(log_path, output_path=None):
"""
分析 Nginx 訪問(wèn)日志,生成統(tǒng)計(jì)報(bào)告。
參數(shù):
log_path: 輸入日志文件路徑
output_path: 輸出 JSON 報(bào)告路徑,為 None 則不寫文件
返回:
dict: 統(tǒng)計(jì)報(bào)告
"""
log_path = Path(log_path)
if not log_path.exists():
raise FileNotFoundError(f"日志文件不存在: {log_path}")
# 統(tǒng)計(jì)數(shù)據(jù)
total_lines = 0
parsed_lines = 0
status_counts = defaultdict(int) # 各狀態(tài)碼出現(xiàn)次數(shù)
error_urls = defaultdict(int) # 5xx 錯(cuò)誤的 URL 分布
top_ips = defaultdict(int) # 各 IP 的請(qǐng)求次數(shù)
total_bytes = 0
with open(log_path, "r", encoding="utf-8") as f:
for line in f:
total_lines += 1
line = line.strip()
if not line:
continue
parsed = parse_nginx_log_line(line)
if parsed is None:
continue # 解析失敗,跳過(guò)該行
parsed_lines += 1
status = parsed["status"]
status_counts[status] += 1
top_ips[parsed["ip"]] += 1
total_bytes += parsed["size"]
# 收集 5xx 錯(cuò)誤 URL
if 500 <= status < 600:
error_urls[parsed["url"]] += 1
# 構(gòu)建報(bào)告
error_rate = 0.0
if parsed_lines > 0:
error_5xx = sum(v for k, v in status_counts.items() if 500 <= k < 600)
error_rate = round(error_5xx / parsed_lines * 100, 2)
# 按請(qǐng)求數(shù)排序取 Top 10
top_10_ips = sorted(top_ips.items(), key=lambda x: x[1], reverse=True)[:10]
top_10_errors = sorted(error_urls.items(), key=lambda x: x[1], reverse=True)[:10]
report = {
"summary": {
"total_lines": total_lines,
"parsed_lines": parsed_lines,
"total_bytes": total_bytes,
"error_rate_5xx": f"{error_rate}%",
},
"status_distribution": dict(sorted(status_counts.items())),
"top_10_client_ips": [{"ip": ip, "requests": n} for ip, n in top_10_ips],
"top_10_error_urls": [{"url": url, "errors": n} for url, n in top_10_errors],
}
# 寫入 JSON 報(bào)告
if output_path:
output_path = Path(output_path)
output_path.parent.mkdir(parents=True, exist_ok=True)
with open(output_path, "w", encoding="utf-8") as f:
json.dump(report, f, ensure_ascii=False, indent=2)
print(f"報(bào)告已寫入: {output_path}")
return report
# 運(yùn)行分析
if __name__ == "__main__":
report = analyze_nginx_log(
log_path="access.log",
output_path="reports/nginx_report.json"
)
print(f"總請(qǐng)求數(shù): {report['summary']['parsed_lines']}")
print(f"5xx 錯(cuò)誤率: {report['summary']['error_rate_5xx']}")
print("\nTop 5 錯(cuò)誤 URL:")
for item in report["top_10_error_urls"][:5]:
print(f" {item['errors']:5d} 次 {item['url']}")
7.4 運(yùn)行效果示例
報(bào)告已寫入: reports/nginx_report.json
總請(qǐng)求數(shù): 98342
5xx 錯(cuò)誤率: 0.23%
Top 5 錯(cuò)誤 URL:
89 次 /api/order/create
45 次 /api/payment/callback
23 次 /api/user/update
12 次 /api/product/import
8 次 /internal/health
八、文件操作語(yǔ)法速查
| 操作 | 代碼 | 注意點(diǎn) |
|---|---|---|
| 讀取全部?jī)?nèi)容 | f.read() | 大文件慎用,內(nèi)存全量加載 |
| 逐行讀取 | for line in f: | 大文件首選,內(nèi)存友好 |
| 寫入覆蓋 | open("f", "w") | 清空原有內(nèi)容 |
| 寫入追加 | open("f", "a") | 在末尾續(xù)寫 |
| CSV 讀(推薦) | csv.DictReader(f) | 每行是字典,按字段名取值 |
| CSV 寫(含中文) | encoding="utf-8-sig" | Excel 打開不亂碼 |
| JSON 讀 | json.load(f) | 自動(dòng)轉(zhuǎn) Python 對(duì)象 |
| JSON 寫 | json.dump(..., ensure_ascii=False) | 中文不轉(zhuǎn)義 |
| 路徑拼接 | Path("dir") / "file.txt" | 跨平臺(tái),自動(dòng)處理斜杠 |
| 創(chuàng)建目錄 | Path.mkdir(parents=True, exist_ok=True) | 兩個(gè)參數(shù)通常都要加 |
寫在最后
文件操作的坑不少,但繞開大多數(shù)麻煩只需要記幾條:
- 始終用
with open(),而不是手動(dòng)close() - 始終指定
encoding,不要依賴系統(tǒng)默認(rèn)編碼 - 大文件逐行迭代,不要
read()把 GB 級(jí)日志塞進(jìn)內(nèi)存 - CSV 含中文要用 Excel 打開,寫入用
utf-8-sig - JSON 寫入記得加
ensure_ascii=False,否則中文變成\uXXXX
日志分析器是這些知識(shí)點(diǎn)的一次完整串聯(lián)——文件路徑用 pathlib,文件讀取用逐行迭代,統(tǒng)計(jì)結(jié)果用字典,報(bào)告輸出用 JSON。這套組合在實(shí)際項(xiàng)目里出現(xiàn)頻率極高,可以直接拿去改造使用。
到此這篇關(guān)于Python高效實(shí)現(xiàn)讀寫文件和處理CSV/JSON詳解的文章就介紹到這了,更多相關(guān)Python文件操作內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python FastAPI返回不帶雙引號(hào)的字符串問(wèn)題
這篇文章主要介紹了Python FastAPI返回不帶雙引號(hào)的字符串問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Python編程快速上手——強(qiáng)口令檢測(cè)算法案例分析
這篇文章主要介紹了Python強(qiáng)口令檢測(cè)算法,結(jié)合實(shí)例形式分析了Python針對(duì)密碼口令強(qiáng)度檢測(cè)的相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下2020-02-02
Python?實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人
這篇文章主要介紹了Python?實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人,下文圍繞利用Python?實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人的相關(guān)資料展開內(nèi)容,需要的小伙伴可以參考一下2022-02-02
使用Python自建輕量級(jí)的HTTP調(diào)試工具
這篇文章主要為大家詳細(xì)介紹了如何使用Python自建一個(gè)輕量級(jí)的HTTP調(diào)試工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下2025-04-04
python fuzzywuzzy模塊模糊字符串匹配詳細(xì)用法
這篇文章主要介紹了使用Python完成公司名稱和地址的模糊匹配的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
對(duì)python sklearn one-hot編碼詳解
今天小編就為大家分享一篇對(duì)python sklearn one-hot編碼詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

