将文本文件读入字典时出现问题

时间:2019-06-02 12:53:23

标签: python

我是Python的新手,想将文本文件读入字典。问题在于它读取所有内容,并且仅保留最后一条记录。我想读取所有数据并将所有内容存储在Python dict中。

这只是一个简单的文本文件读取和python数据字典存储。不知道为什么它不起作用。感谢有人可以提供帮助。

book_data = {}

with open('test_data.txt', 'r', encoding='utf8') as raw_data:
        for item in raw_data:
            if ':' in item:
                key,value = item.split(':', 1)
                book_data[key]=value.lower()

test_data.txt

Book_ID: #111
Book_Title: Python 101
Book_description: This is a book about Python for beginners. 

Book_ID: #222
Book_Title: Java 101
Book_description: This is a book about  Java  for beginners. 


Book_ID: #333
Book_Title: Ruby 101
Book_description: This is a book about  Ruby for beginners. 


Book_ID: #444
Book_Title: C# 101
Book_description: This is a book about  C#  for beginners. 

我的输出仅为1条记录,而不是4条记录。

for k,v in book_data.items():
    print(k," : ", v)

输出:

Book_ID  :   #444

Book_Title  :   c# 101

Book_description  :   this is a book about  c#  for beginners.

3 个答案:

答案 0 :(得分:1)

每次都覆盖,例如,在打印时,键“ Book_ID”首先保存为111,然后是222,然后是333,然后是444。您可能为问题使用了错误的数据结构。如果要使用id作为键,则可能应该为每个对象创建一个新的字典,并将它们插入ID为键的book_data中

答案 1 :(得分:1)

您每次迭代都会覆盖book_data中相同键的值。

答案 2 :(得分:1)

您正在使用三个键:Book_IDBook_TitleBook_description。 字典只能容纳一个键的一个值。您需要找到一种更合适的数据结构来表示该文件在内存中。

您可能想要的是一个键为111、222、333、444的字典。每个键的值将是另一个键为Book_IDBook_Title和{{1}的字典}。

浏览文件,像现在一样处理密钥。但是,每当遇到空白行时,请将截至该点为止已收集的字典放入父字典中。然后继续扫描空的字典。在文件末尾,将最后一个字典也放到父文件中。

以下是一些基本代码,并考虑了注释:

Book_description