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