使用Python将文本文件解析到SQL数据库

0 投票
2 回答
4851 浏览
提问于 2025-04-17 13:14

我是一名极初级的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 个回答

1

你应该了解一下文件处理在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]的数据。

2

几点建议:

  1. 从你的描述来看,你似乎想把所有数据放在一个表里,这样做一般不太好。建议把数据分成两个表:一个叫父表(PARENT),另一个叫子表(CHILDREN)。父表应该包含一个ID,而子表至少要有两列:PARENT_ID和CHILD_VALUE(或者类似的名字)。PARENT_ID是父表的ID,这个关系可以是数据库中的外键,也可以不是(这取决于你用的数据库)。然后,在处理数据时,把相关记录插入到子表中,比如VALUES("1.1", "1.1childA")、VALUES("1.1", "1.1childB")等等。

  2. 处理数据的过程应该很简单:逐行读取数据,当遇到“父”行时,更新父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模块,这个工具非常适合处理这类工作。

撰写回答