我是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.
答案 0 :(得分:1)
每次都覆盖,例如,在打印时,键“ Book_ID”首先保存为111,然后是222,然后是333,然后是444。您可能为问题使用了错误的数据结构。如果要使用id作为键,则可能应该为每个对象创建一个新的字典,并将它们插入ID为键的book_data中
答案 1 :(得分:1)
您每次迭代都会覆盖book_data中相同键的值。
答案 2 :(得分:1)
您正在使用三个键:Book_ID
,Book_Title
和Book_description
。
字典只能容纳一个键的一个值。您需要找到一种更合适的数据结构来表示该文件在内存中。
您可能想要的是一个键为111、222、333、444的字典。每个键的值将是另一个键为Book_ID
,Book_Title
和{{1}的字典}。
浏览文件,像现在一样处理密钥。但是,每当遇到空白行时,请将截至该点为止已收集的字典放入父字典中。然后继续扫描空的字典。在文件末尾,将最后一个字典也放到父文件中。
以下是一些基本代码,并考虑了注释:
Book_description