2015-02-10 13 views
-1

У меня есть файл, который выглядит примерно следующим образом:Разбор текстового файла в словарь

Book 
Key: Norris2013 
Author: Elizabeth Norris 
Title: Unbreakable 
Publisher: Harper Collins Publishers 
Date: 2013 
Book 
Key: Rowling1997 
Author: J.K. Rowling 
Title: Harry Potter and the Philosopher's Stone 
Publisher: Bloomsbury Publishing 
Date: 1997 
Book 
Key: Dickens1894 
Author: Charles Dickens 
Title: A tale of two cities 
Publisher: Dodd, Mead 

EDIT: Я ввод данных в словарь так:

newDict = {} 

with open('file.txt', 'r') as f: 
    for line in f: 
     splitLine = line.split() 
     newDict[splitLine[0]] = " ".join(splitLine[1:]) 
print (newDict) 

Почему это только распечатывать последнюю запись в словаре?

+3

Это очень просто, но вы должны показать некоторую работу, прежде чем мы хоть что –

+1

чтения строк по одному. Если строка 'Book', она запускает новую книгу, иначе строка имеет поле ключа-значения, причем эти элементы разделяются символом': '. Они должны быть прочитаны в словаре или в экземпляре класса. Теперь переведите это на Python, и все готово. –

+0

добавленный код, который я использую. Но не могу понять, почему он печатает только последнюю запись. – user3528944

ответ

0

Вы перезаписываете словарь снова и снова, так как вы повторно используете одни и те же ключи несколько раз. Вы, вероятно, хотите, чтобы создать список словарей:

books = [] # Start with an empty list 
book = {}  # and an empty dictionary for the current book 
with open('file.txt', 'r') as f: 
    for line in f: 
     if line.strip() == "Book": # Are we at the start of a new book? Then... 
      if book:    # Add the current book (if there is one) to list 
       books.append(book) 
       book = {}   # Start a new book 
     else: 
      splitLine = line.strip().split() 
      book[splitLine[0]] = " ".join(splitLine[1:]) 
if book:       # Add final book to list 
    books.append(book) 
print (books) 
Смежные вопросы