2017-08-07 23 views
0

我有一個XML/TXT文件是這樣的:如何使用python從這個xml/txt文件構建一個sqlite表?

<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> 

我想建立一個SQLite表像下使用python:

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,language等。

+0

任何特別的原因,爲什麼你在這個標記R' –

+0

是的。如果在R中有一個內置的庫來做到這一點,那也適用於我。我知道R中有一個RSQlite軟件包。但是,我之前沒有使用它。話雖如此,我不認爲R可以比Python更有用。只是保持一個選項打開。 – 0x1

+1

這是關於解析XML還是關於將東西放入SQLite?看起來像那些是兩個不同的問題,並且很簡單,他們已經在SO上多次單獨回答。 (例如,第一個谷歌命中搜索「python xml parse」會調用[xml'模塊上的python2幫助](https://docs.python.org/2/library/xml.etree.elementtree.html),充滿示例數據和代碼。) – r2evans

回答

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)