我正在使用 Zim Wiki(跨平台,FOSS)应用程序,我用它来保存个人 wiki,其中包含大量来自表格、复制和粘贴、我自己编写的数据,以及下载和附加 .png 和.html 文件以供查看和离线访问。
未写入或粘贴的数据可以以名称、url地址以及图片和其他附件的名称和位置的形式存储在表中。
要插入到 zim 中,我可以使用带有所见即所得的前端,或者为了制作每个条目的骨架,我可以修改模板文本条目。如果我这样做,除了每一行中每个字符的位置和身份之外,其他都无关紧要。
通过提供此图像中的文本:
DandelionDemo source text ,
--我可以为蒲公英做这个条目:
DandelionDemo Wiki .
所以,我可以在 Zim 中生成和命名 Wiki 条目,它会为我创建 .txt 文件,并插入时间戳和标题,因此,没有粘贴字段的此类条目的模板将是:
**Full Scientific Name: **[[|]]**[syn]**
**Common Name(s): **
===== =====
**USDA PLANTS entry for Code:** [[https://plants.usda.gov/core/profile?symbol=|]] **- CalPhotos available images for:** [[https://calphotos.berkeley.edu/cgi/img_query?query_src=photos_index&where-taxon=|]]
**---**
**From - Wikipedia **[[wp?]] **- **[[/Docs/Plants/]]
{{/Docs/Plants/?height=364}}{{/Docs/Plants/?height=364}}
**()** //,// [[|(source)]]
**()** //// [[|(source)]]
**Wikipedia Intro: **////
---
所以第一行内容,在第 31 个字符(制表符)之后,粘贴“http... {etc}。然后程序将在“之后插入”Taraxacum officinale... {etc}” |”,或者第 32 个字符是什么,等等。这些数据可以来自“table1”和“table2”,或者将这些表组合成一个非规范化的“table1table2”,其中每一行都可以转换为文本或.csv 或者我不知道,你怎么看?
在 LibreOffice 中有没有办法做到这一点?我使用 LibreOffice Base 生成了一个填充字段的“书籍”表单,但它的数据要简单得多,没有 wiki 点赞以及图像和附件的拖放粘贴。所以也许答案是变得更简单?这些表目前不是注册数据库的一部分,但是一旦我决定了这样做的方法,我就可以这样做。
我最终正在寻找一种“方法”,希望是一种“简单”的方法。但是,这可能不在 LibreOffice 中。如果没有,我知道我可以用 Python 做到这一点,但我还没有学到很多关于 Python 的知识。如果涉及到一门语言,那是第一个也是唯一一个我不知道我会为这个项目投入学习的语言。如果您知道在 Python 中执行此操作的“方法”,请告诉我,我的第一个项目和构建学习过程的方法将是学习您分享的方法。
如果您知道其他一些 Linux GUI,我肯定会感兴趣,但仅限于涉及最少/不编译的活跃的免费和开源构建。我知道 SQL 和 DBMS 的基础知识。过去,已经让 Microsoft SQL server lite 工作,但还没有让 DBeaver 工作。如果您知道 CLI 方式也请告诉我,但我是一个自学成才的户外爱好者 Linux 新手并且主要知道如何调整程序中的小设置,如何使用像 ImageMagick 这样的适度简单的程序,并且我已经构建了一个用于 Drupal 和 Wordpress 的灯组很少(没有 BASH 等...)。
非常感谢!
最佳答案
好吧,既然你想学点python,那我就给你推荐一个方法吧。首先你需要一个类似模板引擎的jinja2 (还有很多其他的)-,我们示例中的数据源是一个 .csv 文件,-可以是其他的,比如 db- 最后是一些逐行读取 csv 并将内容与模板混合的代码。
示例 CSV 文件:
1;sample
2;dandelion
3;just for fun
示例模板:
**Full Scientific Name: **[[|]]**[syn]**
**Common Name(s): *{{name}}*
===== =====
USDA PLANTS entry for Code: *{{symbol}}*
---
示例代码:
#!/usr/bin/env/python
#
# Using the file system load
#
# We now assume we have a file in the same dir as this one called
# test_template.ziim
#
from jinja2 import Environment, FileSystemLoader
import os
import csv
# Capture our current directory
THIS_DIR = os.path.dirname(os.path.abspath(__file__))
def print_zim_doc():
# Create the jinja2 environment.
# Notice the use of trim_blocks, which greatly helps control whitespace.
j2_env = Environment(loader=FileSystemLoader(THIS_DIR),
trim_blocks=True)
template = j2_env.get_template('test_template.zim')
with open('example.csv') as File:
reader = csv.reader(File, delimiter=';')
for row in reader:
result = template.render(
symbol=row[0]
, name=row[1]
)
# to save the results
with open(row[0]+".txt", "wt") as fh:
fh.write(result)
fh.close()
if __name__ == '__main__':
print_zim_doc()
代码非常简单,读取与 python 代码位于同一文件夹中的模板,打开 csv 文件(也位于同一位置),遍历 csv 的每一行并使用值呈现模板csv 列填充模板中的 {{var_name}},最终将渲染结果保存在一个名为 csv 列值之一的新文件中。此示例将生成 3 个文件(1.txt、2.txt、3.txt)。从这里您可以扩展和改进代码以获得您想要的结果。
关于python - LibreOffice/其他填充模板 .txt 文件以导入 Zim Wiki 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49019088/