最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python高效實(shí)現(xiàn)讀寫文件和處理CSV/JSON詳解

 更新時(shí)間:2026年04月28日 09:44:00   作者:SilentSamsara  
本篇用一個(gè)日志分析器作為貫穿場(chǎng)景,從最基礎(chǔ)的?open()?函數(shù)講起,覆蓋文本讀寫,CSV,JSON,路徑處理,以及幾個(gè)在生產(chǎn)代碼里真正會(huì)踩的坑,希望對(duì)大家有所幫助

適合讀者:掌握了函數(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-8utf-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 / Falsetrue / falsebool
NonenullNone
set? 不支持
datetime? 不支持

常見(jiàn)坑setdatetime 對(duì)象無(wú)法直接序列化為 JSON,需要手動(dòng)轉(zhuǎn)換(setlist,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-8utf-8-sig
StopIterationnext(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)題

    這篇文章主要介紹了Python FastAPI返回不帶雙引號(hào)的字符串問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Django xadmin安裝及使用詳解

    Django xadmin安裝及使用詳解

    這篇文章主要介紹了Django xadmin安裝及使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Python編程快速上手——強(qiáng)口令檢測(cè)算法案例分析

    Python編程快速上手——強(qiáng)口令檢測(cè)算法案例分析

    這篇文章主要介紹了Python強(qiáng)口令檢測(cè)算法,結(jié)合實(shí)例形式分析了Python針對(duì)密碼口令強(qiáng)度檢測(cè)的相關(guān)算法實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-02-02
  • 利用python控制Autocad:pyautocad方式

    利用python控制Autocad:pyautocad方式

    這篇文章主要介紹了利用python控制Autocad:pyautocad方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • 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ī)器人,下文圍繞利用Python?實(shí)現(xiàn)驅(qū)動(dòng)AI機(jī)器人的相關(guān)資料展開內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • 使用Python自建輕量級(jí)的HTTP調(diào)試工具

    使用Python自建輕量級(jí)的HTTP調(diào)試工具

    這篇文章主要為大家詳細(xì)介紹了如何使用Python自建一個(gè)輕量級(jí)的HTTP調(diào)試工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以參考一下
    2025-04-04
  • 使用Pandas操作Excel文件的技巧與方法分享

    使用Pandas操作Excel文件的技巧與方法分享

    今天接到一個(gè)需求,需要讀取excel,將其中兩列分別作為字典的key、value進(jìn)行保存,怎么讀取excel呢,之前好像使用過(guò)Pandas,但是接觸不多,借此機(jī)會(huì)記錄一下學(xué)習(xí)的收獲,需要的朋友可以參考下
    2023-12-12
  • python fuzzywuzzy模塊模糊字符串匹配詳細(xì)用法

    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編碼詳解

    今天小編就為大家分享一篇對(duì)python sklearn one-hot編碼詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 多場(chǎng)景下的Pandas使用技巧分享

    多場(chǎng)景下的Pandas使用技巧分享

    這篇文章主要介紹了多場(chǎng)景下的Pandas使用技巧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評(píng)論

马关县| 新昌县| 平陆县| 宁明县| 阜平县| 福安市| 静安区| 桦川县| 临清市| 永嘉县| 盐山县| 云南省| 张家口市| 榆社县| 日喀则市| 威远县| 蓬莱市| 丰原市| 莱芜市| 龙胜| 宁远县| 收藏| 大足县| 肃宁县| 额济纳旗| 垫江县| 年辖:市辖区| 巫山县| 通州区| 二连浩特市| 遂平县| 来凤县| 万盛区| 武宁县| 高青县| 静安区| 台湾省| 舟曲县| 贵定县| 丹凤县| 美姑县|