需要按书名打印书的作者

我不知道如何通过输入书的标题来打印书的作者。本书及其作者通过文本文件中的管道字符(“|”)相互分隔。我只知道如何打印第一本书的作者。需要按书名打印书的作者

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)

回答:

您的函数在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)

回答:

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

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]

回答:

如果'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 

如果你需要/想要。

以上是 需要按书名打印书的作者 的全部内容, 来源链接: utcz.com/qa/258794.html

回到顶部