如题
印象和 notion 过来的报个到!
笔记的创建时间对我而言是很重要的因素,有什么办法可以修改吗?
这两天从大象和 notion 倒过来大量笔记,创建时间都是这两天的。让我很纠结,茶饭不思!
如我大象的笔记,时间也代表了一种笔记,请问各路大神有没有办法修改啊,在线等,挺急的!!!
如题
印象和 notion 过来的报个到!
笔记的创建时间对我而言是很重要的因素,有什么办法可以修改吗?
这两天从大象和 notion 倒过来大量笔记,创建时间都是这两天的。让我很纠结,茶饭不思!
如我大象的笔记,时间也代表了一种笔记,请问各路大神有没有办法修改啊,在线等,挺急的!!!
估计得自己改数据库里面的创建时间字段,可以问一下 D 大能不能在笔记本内部新增个改创建时间的功能。
改倒是能改,但你得自己会写脚本,或者请其他懂的人写脚本(目测文档名上就包含了时间,所以应该不难写,只不过我不会写 )。
实际上文档的 ID 跟创建时间有关,改了 ID 也就改了创建的时间,可以在.sy 文件里根据文档名上的时间来批量替换文档 ID(包括这个.sy 文件的文件名,如果有子文档的话还包括同名的文件夹名称):
感谢各路大神回复啊,我写了个脚本可以批量修改创建时间,如果需要可以交流使用:)
改完要确实要重建索引:)
```python import os import json import re def process_files(directory_path): mapping_array = [] # 遍历 SiYuan/data 目录下所有 .sy 结尾的文件 for root, dirs, files in os.walk(directory_path): for file in files: if file.endswith(".sy"): file_path = os.path.join(root, file) # 提取文件名中的时间和唯一码 match = re.match(r'(\d+)-(\w+)\.sy', file) if match: create_time, file_key = match.groups() else: continue # 读取 JSON 文件内容,根据这个title你可以确定笔记创建时间(从其他笔记应用导过来) with open(file_path, 'r', encoding='utf-8') as json_file: data = json.load(json_file) title_content = data.get("Properties", {}).get("title", "") # 生成映射数组 mapping = { 'key': file_key, 'title': title_content, 'real_create_time': '', 'filePath': file_path } mapping_array.append(mapping) # 将映射数组保存到 mappings.txt 文件中 with open('mappings.txt', 'w', encoding='utf-8') as mappings_file: json.dump(mapping_array, mappings_file, ensure_ascii=False, indent=2)
# 替换你思源本地数据绝对路径
directory_path = '/Users/yourdir/SiyuanTestCanDelete/data'
process_files(directory_path)
import json
import re
import os
def replace_time_in_files(mapping_array):
for mapping in mapping_array:
# 只有当 real_create_time 不为空时才执行替换操作
if mapping['real_create_time']:
old_file_path = mapping['filePath']
# 读取旧文件内容
with open(old_file_path, 'r', encoding='utf-8') as old_file:
file_content = old_file.read()
# 替换文件内容中的时间戳
new_file_content = re.sub(
r'(?<="ID":")(\d{14})|(?<="id":")(\d{14})|(?<="updated":")(\d{14})',
mapping['real_create_time'],
file_content
)
# 构造新文件名
old_dir, old_file_name = os.path.split(old_file_path)
new_file_name = mapping['real_create_time']+'-'+mapping['key']+'.sy'
new_file_name = os.path.join(old_dir, new_file_name)
# print(old_dir,old_file_path,new_file_name,new_file_content,sep='\r\n\r\n')
# 写入新文件
with open(new_file_name, 'w', encoding='utf-8') as new_file:
new_file.write(new_file_content)
# 删除旧文件 此处先保留以备恢复
# os.remove(old_file_path)
# 读取映射数组
with open('mappings.txt', 'r', encoding='utf-8') as mappings_file:
mappings = json.load(mappings_file)
# 第三步:替换文件名和文件内容中的时间
replace_time_in_files(mappings)
非常感谢 @klwb 大佬提供的代码和思路!
我是有大量笔记(1500+)要从印象笔记迁移过来,发现手动添加日期不现实,但是我使用的工具 evernote2md 导出的 md 文件属性里的日期本来就是正确的。于是我稍微修改了大佬的代码,添加了根据 title 寻找对应文件名 md 文件并获得日期的功能,目前来看我的笔记都成功修改为正确时间了。
再次提醒一下各位,我的思源笔记里都是迁移过来的内容,所以执行的时候并不担心数据丢失问题,大家在使用下面代码的时候最好还是做好数据备份或者注释掉删除旧笔记的代码。
代码字数刚好超过限制了,传到了 GitHub Gist: date_change.py
对的,大量笔记的话就要自动化了,印象导出的文件 enex 是 xml 格式里面有所有笔记的 index,后面我也写了个方法,自动索引对应
import xml.etree.ElementTree as ET def parse_xml_iterative(xml_file): notes_data = [] context = ET.iterparse(xml_file, events=('start', 'end')) context = iter(context) event, root = next(context) # 获取根节点 for event, elem in context: if event == 'end' and elem.tag == 'note': title = elem.find('./title').text created = elem.find('./created').text updated = elem.find('./updated').text notes_data.append({ 'title': title, 'created': created.replace('T','').replace('Z',''), 'updated': updated.replace('T','').replace('Z','') }) root.clear() # 清除已处理的元素,减少内存占用 return notes_data
JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。
Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。
应用程序编程接口(Application Programming Interface)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
Sublime Text 是一款可以用来写代码、写文章的文本编辑器。支持代码高亮、自动完成,还支持通过插件进行扩展。
Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。
Open Source, Open Mind, Open Sight, Open Future!
沉迷游戏伤身,强撸灰飞烟灭。
Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。
JSON (JavaScript Object Notation)是一种轻量级的数据交换格式。易于人类阅读和编写。同时也易于机器解析和生成。
Logseq 是一个隐私优先、开源的知识库工具。
Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.
OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。
Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。
ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。
Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。
Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。
Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。
etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。
设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。
这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!
Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。
阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。
SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。
ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于