需要按照书的标题打印一本书的作者

时间:2017-12-02 23:20:33

标签: python algorithm list

我不知道如何通过输入图书的标题来打印图书的作者。本书及其作者通过文本文件中的竖线字符(" |")彼此分开。我只知道如何打印第一本书的作者。

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)

3 个答案:

答案 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)

答案 1 :(得分:0)

假设您的文本文件以booktitle |形式排序作者,这可以做到。

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]

答案 2 :(得分:0)

如果'books.txt'文件包含以下条目:

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

您可以从中构建一个字典,其中包含书名作为键和编写它的作者列表。这就是我所说的:

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

如果你需要/想要。