Files
kman/export/formatter1.md
2026-07-17 15:39:39 +08:00

116 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import pandas as pd
import re
from pypinyin import lazy_pinyin
INPUT_DIR = "/Users/gavin/kman/export"
OUTPUT_DIR = os.path.join(INPUT_DIR, "out")
os.makedirs(OUTPUT_DIR, exist_ok=True)
def parse_filename(filename):
"""
从文件名解析 title 和 subtitle
note_bleafAB-C.md -> title=A, subtitle=B
如果没有冒号subtitle为空
"""
base = os.path.basename(filename).replace("note_bleaf", "").rsplit("-", 1)[0].rsplit(".md", 1)[0]
if "" in base:
title, subtitle = base.split("", 1)
else:
title = base
subtitle = ""
return title.strip(), subtitle.strip()
def slugify(title):
"""
中文转拼音保留字母长度不超过15
"""
py = "".join(lazy_pinyin(title))
py = re.sub("[^a-zA-Z]", "", py)
return py[:15]
def parse_content(filepath):
"""
使用 pandas 读取 CSV 内容,跳过第二行分隔符
"""
try:
df = pd.read_csv(filepath, sep="|", engine="python", dtype=str, skiprows=[1]).dropna(how="all", axis=1)
except Exception as e:
print(f"❌ 解析失败 {filepath}: {e}")
return pd.DataFrame()
# MARKTIME 转 datetime
if "MARKTIME" in df.columns:
df["MARKTIME"] = pd.to_datetime(df["MARKTIME"], errors="coerce")
else:
df["MARKTIME"] = pd.NaT
# AUTHOR 列保证存在
if "AUTHOR" not in df.columns:
df["AUTHOR"] = "未知"
return df
def convert_file(filepath):
df = parse_content(filepath)
if df.empty:
return
title, subtitle = parse_filename(filepath)
slug = slugify(title)
author_name = df['AUTHOR'].iloc[0] if not df['AUTHOR'].isnull().all() else "未知"
# 最早的标记时间
if df['MARKTIME'].isnull().all():
date_str = "2025-01-07 11:00:00"
else:
date_str = df['MARKTIME'].min().strftime("%Y-%m-%d %H:%M:%S")
out_lines = [
"---",
f"title: '{title}'",
f"subtitle: '{subtitle}'",
f"author: 大童",
f"date: {date_str}",
f"slug: {slug}",
"description:",
"---",
f"作者:{author_name}",
""
]
# 处理正文
prev_hl = ""
for _, row in df.iterrows():
content = row.get("CONTENT", "")
if row.get("TYPE") == "HL":
out_lines.append(content)
out_lines.append("") # 空行
prev_hl = content
elif row.get("TYPE") == "NT":
out_lines.append(f"> {content}")
out_lines.append("") # 可选空行
else:
# 其他类型直接加内容
out_lines.append(content)
out_lines.append("")
output_filename = f"note_{title}.md"
output_path = os.path.join(OUTPUT_DIR, output_filename)
with open(output_path, "w", encoding="utf-8") as f:
f.write("\n".join(out_lines))
print(f"✅ 生成 {output_path}")
def main():
for fname in os.listdir(INPUT_DIR):
if fname.startswith("note_bleaf") and fname.endswith(".md"):
convert_file(os.path.join(INPUT_DIR, fname))
if __name__ == "__main__":
main()