2017-12-02 171 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