我不知道如何通过输入图书的标题来打印图书的作者。本书及其作者通过文本文件中的竖线字符(" |")彼此分开。我只知道如何打印第一本书的作者。
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)
答案 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
如果你需要/想要。