根据位置将文本文件的各部分存储到多个字典条目中

时间:2013-03-05 23:31:49

标签: python parsing dictionary

极端初学者到python(对编码有点新)。搜索过,得到了一些有用的提示,但我的具体情况比其他相关的stackoverflow帖子(我至少可以找到)复杂一点。

我有一个结果的文本文件。这是文件的一个特定部分,其中写了“摘要”,这是我想要集中收集的整体部分。 之后

Summary: 

行,有5个小节,它们有自己的数据,我想将它们存储为字典中的键。子部分将被调用,level1,level2, - > level5。

每个小节的开头都有一行只有该小节的名字,即

level1:

所以,总结一下:  创建一个包含5个键(标记为level1 - > level5)的字典,每个键都包含该子部分的行数据,但请确保在达到后续级别时,停止保存以前键的数据。

这是我到目前为止所做的事情(警告:以下是非常草率的代码,它可能会让更有经验的编码员感到痛苦):

results = sys.argv[1]
seen_start = False
seen_1 = False
seen_2 = False
seen_3 = False
seen_4 = False
seen_5 = False
results_matrix = {}
j = 'level1'
k = 'level2'
l = 'level3'
m = 'level4'
n = 'level5'

with open(results, "r") as f:

    for line in f:
        if line.find("Summary:") ==0:
            seen_start = True
            continue

        if seen_start:

            if line.find(j) ==0:
                seen_1 = True
                continue

            elif line.find(k) ==0:
                seen_1 = False
                seen_2 = True
                continue
            elif line.find(l) ==0:
                seen_2 = False
                seen_3 = True
                continue
            elif line.find(m) ==0:
                seen_3 = False
                seen_4 = True
                continue
            elif line.find(l) ==0:
                seen_4 = False
                seen_5 = True
                continue



        if seen_1 and line <> '\n':
            results_matrix[j] = (line.rstrip('\n'))
            if line.find(k) ==0:
                seen_1 = False
                seen_2 = True
                continue


        if seen_2 and line <> '\n' :
            results_matrix[k] = (line.rstrip('\n'))
            if line.find(l) ==0:
                seen_2 = False
                seen_3 = True
                continue
            print results_matrix[k]

信不信由你,代码实际上正确地保存了最新的子部分,但是将之前的条目保存为该子部分的最后一行。即results_matrix [k]将在此实例中起作用,但results_matrix [j]只包含该部分最后一行的条目


非常感谢您的投入!

1 个答案:

答案 0 :(得分:1)

results_matrix[j] = (line.rstrip('\n'))在每一行重写results_matrix[j],因此只能看到最后一行。尝试添加:
results_matrix[j] = ""
for循环之前,然后:
results_matrix[j] = results_matrix[j] + line
使用rstrip将一起运行所有行。