使用Python将文本文件解析到SQL数据库
我是一名极初级的Python和SQL学习者。我到处找帮助,但没能找到我需要的东西,非常感谢任何帮助。
正如标题所说,我有一个非常大的文本文件,想用Python把它解析到SQL数据库里。这个文本文件的格式是这样的:
#Parent field 1.1
child 1.1
child 1.1 continued
# Parent field 1.2
child 1.2
# Parent field 1.3
child 1.3 text
child 1.3 text
more child 1.3 text
...
# Parent field 1.88
child 1.88
#Parent field 2.1
child 2.1
etc...
关于这个列表,有几点需要注意:
- 第一个字段(比如1.1, 2.1)后面没有空格
- 每个子行的字符长度和换行都是不固定的,但在下一个父字段之前总会有一个空行
- 每个父字段有88个字段
- 父字段的数量有好几百个
现在,我希望每个父字段(1.1, 1.2, 1.3 到 88)能成为一列,而后面的数字(2.1, 3.1 到几百)能填充到这些列里。
有没有人能帮我写一个Python脚本,并给我一些解析的方向?如果我没有解释清楚任务,请告诉我,我会尽快提供更多细节。
非常感谢!
本
编辑:我刚意识到,列的数量并不是固定的88,而是可变的。
2 个回答
你应该了解一下文件处理在Python中的用法。
open() , .readlines()
这些方法和列表会对你非常有帮助。
举个例子:
f = open("NAMEOFTXTFILE.TXT","r") #r for read, w for write, a for append.
cell = f.readlines() # Displays the content in a list
f.seek(0) # Just takes the cursor to the first cell (start of document)
print cell[2] # Prints the word or letter in the second cell.
然后你可以用SQL语句发送cell[2]
的数据。
几点建议:
从你的描述来看,你似乎想把所有数据放在一个表里,这样做一般不太好。建议把数据分成两个表:一个叫父表(PARENT),另一个叫子表(CHILDREN)。父表应该包含一个ID,而子表至少要有两列:PARENT_ID和CHILD_VALUE(或者类似的名字)。PARENT_ID是父表的ID,这个关系可以是数据库中的外键,也可以不是(这取决于你用的数据库)。然后,在处理数据时,把相关记录插入到子表中,比如VALUES("1.1", "1.1childA")、VALUES("1.1", "1.1childB")等等。
处理数据的过程应该很简单:逐行读取数据,当遇到“父”行时,更新父ID并插入到父表中,同时读取子行并插入到子表中。你也可以分两次来处理。
大概是这样的:
#!/usr/bin/python
parent=''
child=''
for line in open('input.txt'):
if line.find('#Parent') > -1 or line.find('# Parent') > -1:
parent = field_extract(line) # fun where you extract parent value
parent_id = ... # write it down or generate
# INSERT into PARENT
elif line:
child = field_extract(line)
# INSERT into CHILDREN with parent_id and child values
不过……看到这么简单的做法我还是有点不舒服。我建议你学习一下Pyparsing模块,这个工具非常适合处理这类工作。