ODS 完成
This commit is contained in:
115
hebing.py
Normal file
115
hebing.py
Normal file
@@ -0,0 +1,115 @@
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
# 分隔线定义,保持与你示例中的长度一致
|
||||
HEADER_LINE_SHORT = "=" * 22 # ======================
|
||||
HEADER_LINE_LONG = "=" * 26 # ==========================
|
||||
MIDDLE_LINE = "-" * 31 # -------------------------------
|
||||
|
||||
|
||||
def merge_md_and_json(directory: str, output_file: str = "merged_output.txt") -> None:
|
||||
"""
|
||||
在指定目录下,将 .md 和 .json 文件按规则合并输出到一个文件中。
|
||||
|
||||
规则:
|
||||
- 遍历所有 .md 文件;
|
||||
- 对每个 .md 文件,取“文件名(不含扩展名)中第一个空格前的字符串”作为 key;
|
||||
- 在同目录下按 key 精确匹配 .json 的“文件名(不含扩展名)”;
|
||||
- 只有存在匹配的 json 文件时才合并;找不到 json 的 md 文件丢弃。
|
||||
"""
|
||||
base_dir = Path(directory).resolve()
|
||||
if not base_dir.is_dir():
|
||||
raise NotADirectoryError(f"指定路径不是目录: {base_dir}")
|
||||
|
||||
# 收集所有 json 文件,以“文件名(不含扩展名)”为 key
|
||||
json_map = {}
|
||||
for json_path in base_dir.glob("*.json"):
|
||||
key = json_path.stem # 文件名不含扩展名
|
||||
json_map[key] = json_path
|
||||
|
||||
# 收集所有 md 文件
|
||||
md_files = list(base_dir.glob("*.md"))
|
||||
# 为了输出顺序稳定,按文件名排序
|
||||
md_files.sort(key=lambda p: p.name)
|
||||
|
||||
output_path = base_dir / output_file
|
||||
|
||||
with output_path.open("w", encoding="utf-8") as out_f:
|
||||
first_section_written = False
|
||||
|
||||
for md_path in md_files:
|
||||
# 取 md 文件名(不含扩展名)第一个空格前部分作为 key
|
||||
md_stem = md_path.stem
|
||||
key = md_stem.split(" ", 1)[0] # 仅按第一个空格切分
|
||||
|
||||
json_path = json_map.get(key)
|
||||
if json_path is None:
|
||||
# 没有匹配到 json,丢弃此 md
|
||||
continue
|
||||
|
||||
# 读 md 内容
|
||||
with md_path.open("r", encoding="utf-8") as f_md:
|
||||
md_content = f_md.read()
|
||||
|
||||
# 读 json 内容
|
||||
with json_path.open("r", encoding="utf-8") as f_json:
|
||||
json_content = f_json.read()
|
||||
|
||||
# 如果不是第一段,可以视需要在前面插入一个空行,避免段落粘连
|
||||
if first_section_written:
|
||||
out_f.write("\n")
|
||||
first_section_written = True
|
||||
|
||||
# 写入合并内容
|
||||
# 结构:
|
||||
# ======================
|
||||
# XXX.md
|
||||
# ======================
|
||||
# <md 内容>
|
||||
#
|
||||
# -------------------------------
|
||||
# 示例数据:
|
||||
# <json 内容>
|
||||
#
|
||||
# ==========================
|
||||
# <下一个 md 文件名>
|
||||
# ==========================
|
||||
|
||||
# 头部(短等号)
|
||||
out_f.write(f"{HEADER_LINE_SHORT}\n")
|
||||
out_f.write(f"{md_path.name}\n")
|
||||
out_f.write(f"{HEADER_LINE_SHORT}\n")
|
||||
out_f.write(md_content.rstrip() + "\n") # 去掉尾部多余换行,统一在后面加一个
|
||||
|
||||
out_f.write("\n")
|
||||
out_f.write(f"{MIDDLE_LINE}\n")
|
||||
out_f.write("示例数据:\n")
|
||||
out_f.write(json_content.rstrip() + "\n")
|
||||
|
||||
# 底部(长等号)
|
||||
out_f.write("\n")
|
||||
out_f.write(f"{HEADER_LINE_LONG}\n")
|
||||
out_f.write(f"{md_path.name}\n")
|
||||
out_f.write(f"{HEADER_LINE_LONG}\n")
|
||||
|
||||
print(f"合并完成,输出文件:{output_path}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
"""
|
||||
用法示例:
|
||||
python merge_md_json.py /path/to/dir
|
||||
python merge_md_json.py /path/to/dir result.txt
|
||||
"""
|
||||
if len(sys.argv) < 2:
|
||||
print("用法: python merge_md_json.py <目录路径> [输出文件名]")
|
||||
sys.exit(1)
|
||||
|
||||
input_dir = sys.argv[1]
|
||||
if len(sys.argv) >= 3:
|
||||
output_name = sys.argv[2]
|
||||
else:
|
||||
output_name = "merged_output.txt"
|
||||
|
||||
merge_md_and_json(input_dir, output_name)
|
||||
Reference in New Issue
Block a user