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

标签 python linux database wiki libreoffice

我正在使用 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/

相关文章:

php - move_uploaded_file 返回 false 但 $_FILES 错误为 0

java - 是否有可能丢失 SQLite 数据库连接?

mysql - 新闻文章数据库——我应该在 date_publish 字段上使用索引以加快选择速度吗

python - Pandas DataFrame列的KeyError异常

linux - 在 Linux 中只输入一条命令和在执行 '/bin/sh' 后输入相同的命令有什么区别?

c++ - 使用 boost::serialization 大大增加了二进制大小

sql-server - 结合 DB 和 Lucene 搜索的最佳实践

python 安装失败 "egg_info failed with error code 1"。以前对类似帖子的建议没有效果

python - 如何更改 QTreeView 中特定分支的颜色?

python - Ubuntu 环境变量 - Anaconda Jupyter