繁体   English   中英

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

[英]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_IDBook_TitleBook_description 字典只能容纳一个键的一个值。 您需要找到一个更合适的数据结构来表示该文件在内存中。

您可能想要的是一个键为Book_ID字典。每个键的值将是另一个键为Book_IDBook_TitleBook_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM