[英]Problems reading a text file into dictionary
我是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.
我的输出只是一个记录,而不是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.
每次都覆盖,例如,在打印时,键“ Book_ID”首先被保存为111,然后是222,然后是333,然后是444。 您可能为问题使用了错误的数据结构。 如果要使用id作为键,则可能应该为每个对象创建一个新字典,然后将它们插入ID为键的book_data中
您每次迭代都会在book_data中重写相同键的值。
您正在使用三个键: Book_ID
, Book_Title
和Book_description
。 字典只能容纳一个键的一个值。 您需要找到一个更合适的数据结构来表示该文件在内存中。
您可能想要的是一个键为Book_ID
字典。每个键的值将是另一个键为Book_ID
, Book_Title
和Book_description
。
循环浏览文件,像现在一样处理密钥。 但是,每当遇到空白行时,请将截至该点为止已收集的字典放入父字典中。 然后继续扫描空的字典。 在文件末尾,将最后一个字典也放到父文件中。
这是一些框架代码,考虑了注释:
book_stash = {}
with open(...) as raw_data:
for item in raw_data:
if ':' in item:
key,value = item.split(':', 1)
if key == 'Book_ID':
book_data = {}
book_stash[value] = book_data
else:
book_data[key] = value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.