因此,我尝试从bookfile.txt中获取信息并显示其中的信息。到目前为止,我已经打开了文件。我无法将每一行作为arrayBooks的一个对象。
我想要ArrayBooks[0]="动物农场,1945,152,乔治·奥威尔"
然后,我将使用book1=arrayBooks[0].Split(',')将其拆分为其他信息,例如:
Book1[0]="动物农场"
Book1[1]=1945
Book1[2]=152
Book1[3]="乔治·奥威尔"
因此,当我想要找到最短的书时,我可以将book1[2]与book2[2]和book3[2]进行比较。
我的主要问题是获取数组中的信息并使其可用。我尝试过的任何方法似乎都不起作用,并在displayAll()函数中给出错误。
我使用displayAll()作为控件,因为我觉得如果我可以显示信息,我就可以使用它。
***
Bookfile.txt:
《动物农场》,1945,152,乔治·奥威尔
《杀死一只知更鸟》,1960,324,哈珀·李
《傲慢与偏见》,1813,279,简·奥斯汀和安娜·昆德伦
***
- def main():
- print("Welcome!")
- arrayBooks = populateBooks()
- displayBookMenu()
-
- def displayBookMenu:
- print("\n1: Display All Books")
- print("2: Display Shortest Book")
- print("3: Display Longest Book")
- print("3: Display Oldest Book")
- print("4: Display Newest Book")
- print("0: End")
- choice = int(input("Choice: "))
-
- if choice == 1:
- displayAll()
- elif choice == 2:
- displayShortest()
- elif choice == 3:
- displayLongest()
- elif choice == 4:
- displayOldest()
- elif choice == 5:
- displayNewest()
- elif choice == 0:
- exit()
- else:
- print("Invalid Input")
-
- def populateBooks():
- fp = open("bookfile.txt", "r")
- return fp.readlines()
-
- def displayAll():
-
- def displayShortest():
-
- def displayLongest():
-
- def displayOldest():
-
- def displayNewest():
-
-
- main()
# 回答1
您只需使用从READLINES()返回,并在需要时拆分记录。
- test_text="""Animal Farm,1945,152,George Orwell
- To Kill A Mockingbird,1960,324,Harper Lee
- Pride and Prejudice,1813,279,Jane Austen and Anna Quindlen
- """
- with open("./bookfile.txt", "w") as fp_out:
- fp_out.write(test_text)
-
- book_data=open("./bookfile.txt", "r").readlines()
- book_data_1=book_data[1].split(",")
- book_data_2=book_data[2].split(",")
- print book_data_1[2], book_data_2[2]
- print book_data_1[2] == book_data_2[2]
要放入数组中,您需要追加拆分记录
- book_data=open("./bookfile.txt", "r").readlines()
-
- ## to array
- test_array=[]
- for rec in book_data:
- test_array.append(rec.strip().split(","))
- print "\n", test_array
- print test_array[1][2], test_array[2][2]
- print test_array[1][2]==test_array[2][2]
# 回答2
谢谢!我已经尝试了一些方法,并让文件打开并显示所有内容,但我很难使用从提取的行中提取的单独信息。
以下是我现在掌握的情况:
- def displayBookMenu():
- print("\n1: Display All Books")
- print("2: Display Shortest")
- print("3: Display Longest")
- print("4: Display Oldest")
- print("5: Display Newest")
- print("0: Quit")
- choice = int(input("Choice: "))
-
- if choice==1:
- displayAll(populateBooks())
- elif choice==2:
- displayShortest(arrayBooks)
- elif choice==3:
- pass
- elif choice==4:
- pass
- elif choice==5:
- pass
- elif choice==6:
- pass
- elif choice==0:
- exit()
- else:
- print("Invalid input, please try again.")
-
-
-
- def populateBooks():
- lines = [line.strip().split(',') for line in open("bookfile.txt")]
- return lines
-
-
-
- def displayAll(arrayBooks):
- print("\nAll Books: \n")
- for books in arrayBooks:
- for each_entry in books:
- print (each_entry),
- print
-
-
- def displayShortest():
- list1=[arrayBooks[0][2],arrayBooks[1][2],arrayBooks[2][2]]
- print("Shortest Book: ", min(list1))
-
-
- def main():
- print("Welcome!")
- displayBookMenu()
- populateBooks()
- arrayBooks = populateBooks()
- #end main
-
- main()
我让它显示所有的图书,但当我尝试将页面放在列表中以查找最小值时,我得到关于列表/arrayBooks的错误
# 回答3
程序中唯一知道返回的函数"LINES"在下面
- if choice==1:
- displayAll(populateBooks())
程序中的其他函数都不知道文件读取。您应该为这个程序使用一个类,因为您可以很容易地消除这些问题。
对于选项2,此函数不知道arrayBooks,只有main()函数知道,请参见
这里
有关传递参数的信息,请参见。
- elif choice==2:
- displayShortest(arrayBooks)
一种解决办法是
- def displayBookMenu(arrayBooks):
- print("\n1: Display All Books")
- print("2: Display Shortest Book")
- print("3: Display Longest Book")
- print("3: Display Oldest Book")
- print("4: Display Newest Book")
- print("0: End")
- choice = int(input("Choice: "))
-
- if choice==1:
- displayAll(arrayBooks) ## passed to the function
- ...
- etc.
-
- print("Welcome!")
- arrayBooks = populateBooks() ## catches the return
- displayBookMenu(arrayBooks) ## passes the array to the function
最后,我建议您在99页的文件中包含一些测试书,因为它不会打印您认为的最小值,因为您使用的是字符串(从左到右求值),而不是整数。
- print min(["99", "250", "1001"])