【问题标题】:How can I build an sqlite table from this xml/txt file using python?如何使用 python 从这个 xml/txt 文件构建一个 sqlite 表?
【发布时间】:2017-08-07 06:22:49
【问题描述】:

我有一个这样的 xml/txt 文件:

<text id="32a45" language="ENG" date="2017-01-01" time="11:00" timezone="Eastern">

<s id="1">
foo
bar
</s>
<d>
11235
</d>

<text id="32a47" language="ENG" date="2017-01-05" time="1:00" timezone="Central">

<s id="2">
foo
bar
</s>
<d>
11235
</d>

<text id="32a48" language="ENG" date="2017-01-07" time="3:00" timezone="Pacific">

<s id="3">
foo
bar
</s>
<d>
11235
</d>

我想使用 python 构建一个如下所示的 sqlite 表:

id  language    date        timezone    s           d

32a45   ENG     2017-01-01  Eastern     foo bar     11235
32a47   ENG     2017-01-05  Central     baz qux     11235
32a48   ENG     2017-01-07  Pacific     foo bar     11235

知道我该怎么做吗?我不能使用 xmltree 模块,因为原始文件中的 xml 标签被弄乱了。我非常感谢您的帮助。谢谢。

编辑:我可以轻松地将每个文本作为列表中的列表。像这样:

['<text id="32a45" language="ENG" date="2017-01-01" time="11:00" timezone="Eastern">', '<text id="32a47" language="ENG" date="2017-01-05" time="1:00" timezone="Central">', '<text id="32a48" language="ENG" date="2017-01-07" time="3:00" timezone="Pacific">']

但我不知道如何分别从每个列表中获取 id、语言等。

【问题讨论】:

  • 您在此标记 R 的任何特殊原因?
  • 是的。如果有一个内置库可以在 R 中执行此操作,那也适用于我。我知道 R 中有一个 RSQlite 包。但是,我以前没有使用过它。话虽如此,我认为 R 在这里不会比 python 更有用。只是保持一个选项打开。
  • 这是关于解析 XML 还是关于将某些东西放入 SQLite 中?似乎这是两个独立的问题,而且很简单,以至于在 SO 上已经多次单独回答了它们。 (例如,谷歌搜索“python xml parse”的第一个搜索结果是python2 help on the xml module,其中包含大量示例数据和代码。)
  • 主要是在sqlite里面放东西。由于一些标记问题,在这种情况下我不能使用 xmltree。

标签: python mysql xml sqlite


【解决方案1】:

从这里重定向:

How can I make sublists from a list based on strings in python?

import xml.etree.ElementTree as ET
import pandas as pd

strings = ['<text id="32a45" language="ENG" date="2017-01-01" time="11:00" timezone="Eastern">',
'<text id="32a47" language="ENG" date="2017-01-05" time="1:00" timezone="Central">',
'<text id="32a48" language="ENG" date="2017-01-07" time="3:00" timezone="Pacific">']

cols = ["id","language","date","time","timezone"]
data = [[ET.fromstring(string+"</text>").get(col) for col in cols] for string in strings]    
df = pd.DataFrame(data,columns=cols)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2019-06-19
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多