这是一种基于用户提供的数据在csvfile中搜索书籍的方法。如果他们没有为某些输入(例如体裁)提供任何数据,则将使用所有体裁的书籍。例如,如果我输入:作者:-,书名:-,体裁:科幻,那么给出所有科幻书籍,无论作者或书名如何。
def filltreeview(self , authorvar , booknamevar , genrevar):
author = authorvar.get()
bookname = booknamevar.get()
genre = genrevar.get()
books = []
if genre == 'Genre':
if author == '':
if bookname == '':
msg.showerror('Error' , 'Please specify some details')
else:
with open('Books.txt' , 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row == []:
pass
elif row[2] == bookname:
books.append([row[0],row[1],row[2],row[3]])
else:
with open('Books.txt' , 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row == []:
pass
elif row[1] == author:
books.append([row[0],row[1],row[2],row[3]])
print(books)
if bookname == '':
pass
else:
for i in books:
if i[2] != bookname:
books.remove(i)
else:
with open('Books.txt' , 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row == []:
pass
elif row[3] == genre:
books.append([row[0],row[1],row[2],row[3]])
print(books)
if author == '':
if bookname == '':
pass
else:
for i in books:
if i[1] != author:
books.remove(i)
print(books)
if bookname == '':
pass
else:
for i in books:
if i[2] != bookname:
books.remove(i)
print(books)
答案 0 :(得分:1)
如何?
def get_all_books(reader_path):
books = []
with open(reader_path , 'r') as csvfile:
reader = csv.reader(csvfile)
for row in reader:
if row:
books.append(row[:4])
return books
def remove_books(books, row_num, value):
for book in books:
if book[row_num] is not value:
books.remove(book)
return books
def filltreeview(self , authorvar , booknamevar , genrevar):
author, bookname, genre = authorvar.get(), booknamevar.get(), genrevar.get()
if genre == 'Genre' and not author and not bookname:
msg.showerror('Error' , 'Please specify some details')
# a return here will avoid adding the rest of the code under 'else'
else:
books = get_all_books('Books.txt')
if genre:
books = remove_books(books, 3, genre)
if author:
books = remove_books(books, 1, author)
if bookname:
books = remove_books(books, 2, bookname)
print(books)
答案 1 :(得分:0)
函数可能在这里为您提供帮助,例如这段代码:
reader = csv.reader(csvfile)
for row in reader:
if row == []:
pass
elif row[i] == bookname:
books.append([row[x],row[y],row[z],row[w]])
似乎要多次写入,因此您可以将其提取到单独的函数中,然后再使用它。请记住,函数只能做一件事,因此可以在不同的场景和用例中重复使用。
此外,您还应该关注singledispatch
。尝试完成某件事时应使用此功能,但是根据参数类型的不同,它会有所不同。