如何将这些文本段转换为CSV?

时间:2018-09-27 13:05:09

标签: csv text anki

我正在尝试使用带有问题和答案的html标签从文本文件中制作CSV文件。 不幸的是,我已经尝试过并且无法在LibreOffice或任何其他CSV兼容软件中打开它。 我想做的就是转换这样的东西:

<b>Question 1:</b> What is the capital of United States?
<b>Answer:</b> Washington, D.C.

<b>Question 2:</b> What is the capital of United States?
<b>Answer:</b> Washington, D.C.

<b>Question 3:</b> What is the capital of United States?
<b>Answer:</b> Washington, D.C.

以此类推。

结果应为:

Question SEPARATOR Answer

* SEPARATOR不能为颜色或分号,因为问题可能包含最重要的字符(冒号,分号,点)

我想导入Anki,它支持CSV文件。

我尝试使用特殊符号(如#)分隔“问题和答案”,并且只有问题在LibreOffice / OpenOffice中被解析,并且问题文本永远不能包含换行符。如果文本包含换行符,则CSV会混乱。

1 个答案:

答案 0 :(得分:0)

以下是一些Python脚本,可将卡片转换为CSV格式:

import re
import csv

questions = [[]]

with open("original.file", "rt") as f:
    for line in f:
        line = line.strip()
        if line:
            questions[-1].append(line)
        else:
            questions.append([])

# Now we've got the questions in a 2D list.
# Let's just make sure it loaded properly.
assert all(len(question) == 2 for question in questions)

# Let's write a CSV file now.
with open("output.csv", "wt", newline="") as f:
    writer = csv.writer(f)
    for q, a in questions:
        writer.writerow([
            re.fullmatch(r"<b>Question \d+:</b> (.*)", q).group(1),
            re.fullmatch(r"<b>Answer:</b> (.*)", a).group(1)
        ])

现在,您可以使用“基本”卡类型导入它们。此代码丢弃问题编号;我希望那不是太重要。