Python 基于位置将文本文件的部分存储到多个词典条目中

Python 基于位置将文本文件的部分存储到多个词典条目中,python,parsing,dictionary,Python,Parsing,Dictionary,python的极端初学者(对编码有些陌生)。搜索了一下,得到了一些有用的提示,但我的案例比其他相关的stackoverflow帖子要复杂一些(至少我能找到) 我有一个结果的文本文件。文件中有一个特别的部分是写“摘要”的,这是我想重点关注的部分在之后 Summary: 行中,有5个子部分,它们有自己的数据,我想作为键存储在字典中。这些小节将被称为level1,level2,-->level5 每个小节的开头都有一行,只有该小节的名称,即 level1: 因此,总结一下: 创建一个包含5个键(

python的极端初学者(对编码有些陌生)。搜索了一下,得到了一些有用的提示,但我的案例比其他相关的stackoverflow帖子要复杂一些(至少我能找到)

我有一个结果的文本文件。文件中有一个特别的部分是写“摘要”的,这是我想重点关注的部分之后

Summary: 
行中,有5个子部分,它们有自己的数据,我想作为键存储在字典中。这些小节将被称为level1,level2,-->level5

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

level1:
因此,总结一下: 创建一个包含5个键(标记为level1-->level5)的字典,每个键都包含该小节中的行数据,但确保一旦达到下一个级别,停止保存前一个键的数据

以下是我到目前为止所做的(警告:以下代码非常草率,可能会给更有经验的程序员带来痛苦):

results=sys.argv[1]
seed_start=False
SEED_1=错误
SEED_2=错误
SEED_3=错误
SEED_4=错误
SEED_5=错误
结果_矩阵={}
j='level1'
k='level2'
l='level3'
m='level4'
n='level5'
开放式(结果“r”)为f:
对于f中的行:
如果line.find(“摘要:”)==0:
seed_start=True
持续
如果在开始时看到:
如果line.find(j)==0:
见1=真
持续
elif line.find(k)==0:
SEED_1=错误
SEED_2=正确
持续
elif line.find(l)==0:
SEED_2=错误
见3=真
持续
elif行。查找(m)==0:
SEED_3=错误
见4=真
持续
elif line.find(l)==0:
SEED_4=错误
见5=真
持续
如果看到第1行和第“\n”行:
结果_矩阵[j]=(line.rstrip('\n'))
如果line.find(k)=0:
SEED_1=错误
SEED_2=正确
持续
如果看到第2行和第“\n”行:
结果_矩阵[k]=(line.rstrip('\n'))
如果line.find(l)==0:
SEED_2=错误
见3=真
持续
打印结果_矩阵[k]

信不信由你,代码实际上正确地保存了最新的小节,但将以前的条目保存为该小节的最后一行。i、 e.结果_矩阵[k]在本例中有效,但结果_矩阵[j]只有该部分最后一行的条目


非常感谢您的投入

结果矩阵[j]=(line.rstrip('\n'))
在每一行上重写
结果矩阵[j]
,因此只看到最后一行。尝试添加:
results\u matrix[j]=''

for
循环之前,然后:
结果矩阵[j]=结果矩阵[j]+行

使用
rstrip
将同时运行所有行。

结果矩阵[j]=(line.rstrip('\n'))
在每一行上重写
结果矩阵[j]
,因此只看到最后一行。尝试添加:
results\u matrix[j]=''

for
循环之前,然后:
结果矩阵[j]=结果矩阵[j]+行


使用
rstrip
将同时运行所有行。

如果没有示例,很难说如何做到这一点。你能发布你试图解析的文本文件的内容吗?@xhainingx,James Thiele找到了答案。如果您愿意,我仍然可以提供示例代码。如果没有示例,很难说如何做到这一点。你能发布你试图解析的文本文件的内容吗?@xhainingx,James Thiele找到了答案。如果您愿意,我仍然可以提供示例代码
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]