LibreOffice/其他填充模板 .txt 文件以导入 Zim Wiki 的方法

Posted

技术标签:

【中文标题】LibreOffice/其他填充模板 .txt 文件以导入 Zim Wiki 的方法【英文标题】:LibreOffice/other method of filling template .txt file for import into Zim Wiki 【发布时间】:2018-02-27 22:36:16 【问题描述】:

我正在使用应用程序 Zim Wiki(跨平台,FOSS),我使用它来保存个人 wiki,其中包含来自表格、复制和粘贴、我自己的写作、下载和附加 .png 和.html 文件用于查看和离线访问。

未写入或未粘贴的数据可以以名称、url地址、图片的名称和位置等附件的形式存储在表格中。

要插入到zim,我可以使用WSIWYG的前端,或者制作每个条目的骨架,我可以修改一个模板文本条目。如果我这样做,除了每行中每个字符的位置和身份之外,没有任何问题。

通过提供此图片中的文字: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 的几个 Lamp 堆栈(没有 BASH 等)。

非常感谢!

【问题讨论】:

【参考方案1】:

好的,既然你想学习一些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)。从这里您可以扩展和改进代码以获得您想要的结果。

【讨论】:

以上是关于LibreOffice/其他填充模板 .txt 文件以导入 Zim Wiki 的方法的主要内容,如果未能解决你的问题,请参考以下文章

用递增值填充列单元格的公式 (LibreOffice)

使用命令行中的值填充现有 LibreOffice 文档

在 libreoffice / excel 中插入值而不使用自动填充

如何从命令行使用 LibreOffice 将 .doc 文件转换为 .txt?

在 LibreOffice 中使用 CLI --convert-to 参数时如何删除表格填充

LibreOffice Base 表单:填充表格或网格控件未绑定到数据源