遍历指定文件夹中的PDF文件,从文件名中提取书名信息,然后生成符合NoteExpress导入格式的文本文件。
代码如下:
python
import os
import re
# ============================================
# 配置区域 - 请根据你的实际情况修改
# ============================================
# PDF文件所在的文件夹路径
folder_path = r"D:\BaiduNetdiskDownload\战史丛书102卷"
# 输出文件路径
output_path = r"D:\BaiduNetdiskDownload\BookEndnote.txt"
# ============================================
# 主程序
# ============================================
def extract_info(filename):
"""
从PDF文件名中提取卷数信息和书名
文件名格式示例:戦史叢書第073巻 関東軍<2>関特演・終戦時の対ソ戦.pdf
返回: (卷数信息, 书名)
"""
# 去掉.pdf后缀
name_without_ext = os.path.splitext(filename)[0]
# 提取卷数:匹配 "戦史叢書第XXX巻"
volume_match = re.search(r'(戦史叢書第\d+巻)', name_without_ext)
volume = volume_match.group(1) if volume_match else ""
# 提取书名:去掉卷数部分和前面的空格/全角空格
book_title = re.sub(r'戦史叢書第\d+巻\s*[ \s]*', '', name_without_ext).strip()
return volume, book_title
def main():
# 检查文件夹是否存在
if not os.path.exists(folder_path):
print(f"错误:文件夹不存在 - {folder_path}")
print("请检查路径是否正确!")
return
# 存储所有记录
records = []
# 获取所有PDF文件并排序
pdf_files = [f for f in os.listdir(folder_path) if f.lower().endswith('.pdf')]
pdf_files.sort() # 按文件名排序(保持卷数顺序)
print(f"找到 {len(pdf_files)} 个PDF文件")
print("=" * 60)
# 遍历所有PDF文件
for idx, filename in enumerate(pdf_files, 1):
volume, book_title = extract_info(filename)
# 生成NoteExpress兼容格式的记录
# NoteExpress支持的字段标签:
# %0 文献类型 (Book/书籍)
# %A 作者
# %T 标题(完整书名含卷数)
# %B 副标题/丛书名
# %I 出版社
# %D 年份
# %V 卷号
# %N 期号
# %P 页数
# %X 摘要
# %@ ISBN
# %U URL
# %K 关键词
# 标题格式:戦史叢書第073巻 関東軍<2>関特演・終戦時の対ソ戦
full_title = f"{volume} {book_title}" if volume else book_title
record = f"""%0 Book
%A 防衛庁防衛研修所戦史室
%T {book_title}
%B 戦史叢書
%V {volume.replace('戦史叢書', '')}
%I 朝雲新聞社
%C 東京
%D 1980
%K 日本战史,防卫厅,战史丛书,太平洋战争
"""
records.append(record)
# 显示进度
if idx <= 5 or idx == len(pdf_files):
print(f"[{idx:03d}/{len(pdf_files)}] {full_title}")
elif idx == 6:
print("...")
# 将所有记录写入文件(NoteExpress推荐使用UTF-8编码)
with open(output_path, 'w', encoding='utf-8') as f:
f.write('\n'.join(records))
print("=" * 60)
print(f"✅ 成功生成 {len(records)} 条记录")
print(f"📄 文件已保存至: {output_path}")
print("\n💡 导入NoteExpress步骤:")
print(" 1. 打开 NoteExpress")
print(" 2. 点击【文件】→【导入题录】")
print(" 3. 选择生成的 BookEndnote.txt 文件")
print(" 4. 过滤器选择 'NoteExpress' 格式")
print(" 5. 指定目标文件夹,点击【开始导入】")
print("\n📋 生成的字段说明:")
print(" %T 标题:包含完整卷数和书名(如:戦史叢書第073巻 関東軍<2>...)")
print(" %B 丛书名:戦史叢書")
print(" %V 卷号:纯数字(如:073)")
print(" %A 作者:防衛庁防衛研修所戦史室")
print(" %I 出版社:朝雲新聞社")
print(" %D 年份:1966-1980(丛书出版年代)")
if __name__ == "__main__":
main()
即可完成。