54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
|
|
import json
|
|||
|
|
import os
|
|||
|
|
import csv
|
|||
|
|
|
|||
|
|
def load_keywords_from_file(path):
|
|||
|
|
"""逐行读取关键词文件,忽略空行,返回列表"""
|
|||
|
|
arr = []
|
|||
|
|
try:
|
|||
|
|
with open(path, 'r', encoding='utf-8') as f:
|
|||
|
|
for line in f:
|
|||
|
|
s = line.strip()
|
|||
|
|
if s:
|
|||
|
|
arr.append(s)
|
|||
|
|
except Exception:
|
|||
|
|
arr = []
|
|||
|
|
return arr
|
|||
|
|
|
|||
|
|
def write_json(path, obj):
|
|||
|
|
"""以 UTF-8 写入 JSON,使用非 ASCII 保留与缩进"""
|
|||
|
|
with open(path, 'w', encoding='utf-8') as f:
|
|||
|
|
json.dump(obj, f, ensure_ascii=False, indent=2)
|
|||
|
|
|
|||
|
|
def read_json(path):
|
|||
|
|
"""读取 JSON 文件,失败时返回空对象"""
|
|||
|
|
try:
|
|||
|
|
with open(path, 'r', encoding='utf-8') as f:
|
|||
|
|
return json.load(f)
|
|||
|
|
except Exception:
|
|||
|
|
return {}
|
|||
|
|
|
|||
|
|
def ensure_csv_header(path, headers):
|
|||
|
|
"""若 CSV 不存在则创建并写入表头;为空路径直接返回"""
|
|||
|
|
if not path:
|
|||
|
|
return
|
|||
|
|
if not os.path.exists(path):
|
|||
|
|
with open(path, 'w', newline='', encoding='utf-8') as wf:
|
|||
|
|
w = csv.writer(wf)
|
|||
|
|
w.writerow(headers)
|
|||
|
|
|
|||
|
|
def append_csv_rows(path, rows):
|
|||
|
|
"""向 CSV 追加多行,行元素按列表给出;为空路径直接返回"""
|
|||
|
|
if not path:
|
|||
|
|
return
|
|||
|
|
with open(path, 'a', newline='', encoding='utf-8') as af:
|
|||
|
|
w = csv.writer(af)
|
|||
|
|
for r in rows:
|
|||
|
|
w.writerow(r)
|
|||
|
|
"""通用 IO 工具
|
|||
|
|
|
|||
|
|
提供:
|
|||
|
|
- 关键词文件加载
|
|||
|
|
- JSON 读写
|
|||
|
|
- CSV 文件写入(确保表头、追加行)
|
|||
|
|
"""
|