一、為什么先學這 5 個?
? 它們覆蓋了「切 → 洗 → 拼 → 換 → 排版」整條鏈路。
? 任意一段文本處理腳本,80 % 的操作都能用這 5 個方法寫完。
二、五虎上將一覽
方法 | 作用 | 典型場景 | 易踩的坑 |
---|---|---|---|
split(sep=None) | 按分隔符切成列表 | 日志拆字段、CSV 解析 | 連續分隔符會產生空串 |
strip(chars=None) | 去首尾空白/指定字符 | 清洗用戶輸入、去換行 | 只能去首尾,中間不動 |
join(iterable) | 用指定字符串把列表拼回去 | 路徑拼接、SQL 占位符 | 元素必須全是 str |
replace(old, new, count=-1) | 批量替換子串 | 脫敏、模板渲染 | 默認全部替換,count 可限次 |
format / f-string | 格式化輸出 | 日志、報表、郵件 | 舊版 % 格式化已過時 |
三、一行代碼場景秀
- 把網址參數變字典
params = dict(pair.split('=', 1) for pair in query.strip('&').split('&') if pair)
- 清洗并重組文件路徑
clean_path = '/'.join(part.strip() for part in raw.split('/') if part)
- 日志脫敏:手機號中間四位換成 ****
masked = re.sub(r'(\d{3})\d{4}(\d{4})', r'\1****\2', text)
(先用 replace 也行:text.replace(text[3:7], '****')
)
- 批量生成 SQL 占位符
placeholders = ', '.join(['%s'] * len(columns))
sql = f"INSERT INTO {table} ({', '.join(columns)}) VALUES ({placeholders})"
- 模板郵件格式化
body = """
Hi {name},Your order #{order_id} has been shipped on {date}.
""".format(name=name, order_id=oid, date=ship_date)
或更現代的 f-string:
body = f"Hi {name}, your order #{oid} shipped on {ship_date:%Y-%m-%d}"
四、mini 實戰:5 行搞定 nginx 日志轉 CSV
輸入:空格分隔的原始日志行
輸出:ip, time, method, url, status, size
import csv, sys
for line in sys.stdin:parts = line.strip().split()csv.writer(sys.stdout).writerow([parts[0], parts[3][1:], parts[5][1:], parts[6], parts[8], parts[9]])
跑一下:
$ tail -n 100 access.log | python log2csv.py > log.csv
五、一條記憶口令
“split 分,strip 洗,join 拼,replace 換,format 美。”