2017-12-02 167 views
-1

我不知道如何通過輸入書的標題來打印書的作者。本書及其作者通過文本文件中的管道字符(「|」)相互分隔。我只知道如何打印第一本書的作者。需要按書名打印書的作者

def load_library(a): 
    s = open(a,'r') 
    while True: 
     theline = s.readline() 
     razdel = theline.split('|') 
     if len(theline) == 0: 
      break 
     books_authors=razdel.pop(1) 
     return books_authors 
    return razdel 
    s.close() 

if __name__=='__main__': 
    result = load_library('books.txt') 
    print(result) 
+0

將字典映射到作者作爲解決方案就足夠了? –

回答

0

您的函數在while循環中返回調用,而不是打印/保存到列表中。所以只有第一行被讀取。

def load_library(a): 
    s = open(a,'r') 
    result = [] 
    while True: 
      theline = s.readline() 
      razdel = theline.split('|') 
      if len(theline) == 0: 
       break 
      books_authors=razdel.pop(1) 
      result.append(book_authors) 
    s.close() 
    return result 




if __name__=='__main__': 
    result = load_library('books.txt') 
    print(result) 
+0

只需要輸入圖書標題的一位作者,並非所有作者 –

+0

都可以提及關於books.txt中數據格式的更多信息嗎? – skb

0

假設您的文本文件以表格格式排序|作者,這可以做到。

import csv 

#read csv sheet into dict 
D={} 
with open(filename,'r') as f: 
    fcsv=csv.reader(f,delimiter='|') 
    for row in fcsv: 
     D[row[0]]=row[1] 

print D[booktitle] 
0

如果'books.txt'文件包含這些條目:

Title1|Joe Blow 
Title2|Jane Doe 
Title Number Three|Henry Longwords 

你可以建立一個字典,從它那有書名爲鍵和寫作者(S)的列表。這是我我說的:

from pprint import pprint 

def load_library(filename): 
    authors_by_book = {} 
    with open(filename) as file: 
     for line in file: 
      author, title = line.strip().split('|') 
      authors_by_book.setdefault(author, []).append(title) 

    return authors_by_book 


if __name__=='__main__': 
    authors_by_book = load_library('books.txt') 
    pprint(authors_by_book) 
    print() 
    print('Author(s) of {}: {}'.format('Title2', authors_by_book['Title2'])) 

輸出:

{'Title Number Three': ['Henry Longwords'], 
'Title1': ['Joe Blow'], 
'Title2': ['Jane Doe']} 

Author(s) of Title2: ['Jane Doe'] 

原因與每個鍵關聯的值是一個列表,是因爲一本書可以有多個作者。這可能發生,如果相同的標題在'bookts.txt'文件出現了不止一次,像這樣:

Deep Throat|Bob Woodward 
Deep Throat|Carl Bernstein 

您可以修改代碼以支持其在單個條目中列出多個作者,如:

Deep Throat|Bob Woodward|Carl Bernstein 

如果你需要/想要。

+0

是的,這是有效的。謝啦!但是如果我也有相同的txt文件,但是現在我需要找到給定作者的所有書籍。如何編寫這個反轉的程序? –

+0

@Kapa:當然它有效,它是測試代碼。 ';¬)'。請考慮接受它(請參閱[**當某人回答我的問題時該怎麼辦?**](http://stackoverflow.com/help/someone-answers)。 – martineau

+0

@Kapa:查找給定的所有書籍作者,你可以構造第二個名爲'books_by_author'的字典,並以類似於當前我的回答中的方式創建它,只是以相反順序指定的'author'和'title'。 – martineau