在数组中拆分字符串并显示

因此,我尝试从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,简·奥斯汀和安娜·昆德伦
***

选择 | 换行 | 行号
  1. def main():
  2.      print("Welcome!")
  3.      arrayBooks = populateBooks()
  4.      displayBookMenu()
  5.  
  6. def displayBookMenu:
  7.      print("\n1: Display All Books")
  8.      print("2: Display Shortest Book")
  9.      print("3: Display Longest Book")
  10.      print("3: Display Oldest Book")
  11.      print("4: Display Newest Book")
  12.      print("0: End")
  13.      choice = int(input("Choice: "))
  14.  
  15.      if choice == 1:
  16.           displayAll()
  17.      elif choice == 2:
  18.           displayShortest()
  19.      elif choice == 3: 
  20.           displayLongest()
  21.      elif choice == 4: 
  22.           displayOldest()
  23.      elif choice == 5:
  24.           displayNewest()
  25.      elif choice == 0:
  26.           exit()
  27.      else:
  28.           print("Invalid Input")
  29.  
  30. def populateBooks():
  31.      fp = open("bookfile.txt", "r")
  32.      return fp.readlines()
  33.  
  34. def displayAll():
  35.  
  36. def displayShortest():
  37.  
  38. def displayLongest():
  39.  
  40. def displayOldest():
  41.  
  42. def displayNewest():
  43.  
  44.  
  45. main()
# 回答1


您只需使用从READLINES()返回,并在需要时拆分记录。

选择 | 换行 | 行号
  1. test_text="""Animal Farm,1945,152,George Orwell
  2. To Kill A Mockingbird,1960,324,Harper Lee
  3. Pride and Prejudice,1813,279,Jane Austen and Anna Quindlen
  4. """
  5. with open("./bookfile.txt", "w") as fp_out:
  6.     fp_out.write(test_text)
  7.  
  8. book_data=open("./bookfile.txt", "r").readlines()
  9. book_data_1=book_data[1].split(",")
  10. book_data_2=book_data[2].split(",")
  11. print book_data_1[2], book_data_2[2]
  12. print book_data_1[2] == book_data_2[2] 

要放入数组中,您需要追加拆分记录

选择 | 换行 | 行号
  1. book_data=open("./bookfile.txt", "r").readlines()
  2.  
  3. ## to array
  4. test_array=[]
  5. for rec in book_data:
  6.     test_array.append(rec.strip().split(","))
  7. print "\n", test_array
  8. print test_array[1][2], test_array[2][2]
  9. print test_array[1][2]==test_array[2][2] 
# 回答2


谢谢!我已经尝试了一些方法,并让文件打开并显示所有内容,但我很难使用从提取的行中提取的单独信息。
以下是我现在掌握的情况:

选择 | 换行 | 行号
  1. def displayBookMenu():
  2.     print("\n1: Display All Books")
  3.     print("2: Display Shortest")
  4.     print("3: Display Longest")
  5.     print("4: Display Oldest")
  6.     print("5: Display Newest")
  7.     print("0: Quit")
  8.     choice = int(input("Choice: "))
  9.  
  10.     if choice==1:
  11.         displayAll(populateBooks())
  12.     elif choice==2:
  13.         displayShortest(arrayBooks)
  14.     elif choice==3:
  15.         pass
  16.     elif choice==4:
  17.         pass
  18.     elif choice==5:
  19.         pass
  20.     elif choice==6:
  21.         pass
  22.     elif choice==0:
  23.         exit()
  24.     else:
  25.         print("Invalid input, please try again.")
  26.  
  27.  
  28.  
  29. def populateBooks():
  30.     lines = [line.strip().split(',') for line in open("bookfile.txt")]
  31.     return lines
  32.  
  33.  
  34.  
  35. def displayAll(arrayBooks):
  36.     print("\nAll Books: \n")
  37.     for books in arrayBooks:
  38.         for each_entry in books:
  39.             print (each_entry),
  40.             print
  41.  
  42.  
  43. def displayShortest():
  44.     list1=[arrayBooks[0][2],arrayBooks[1][2],arrayBooks[2][2]]
  45.     print("Shortest Book: ", min(list1))
  46.  
  47.  
  48. def main():
  49.         print("Welcome!")
  50.         displayBookMenu()
  51.         populateBooks()
  52.         arrayBooks = populateBooks()
  53. #end main
  54.  
  55. main()

我让它显示所有的图书,但当我尝试将页面放在列表中以查找最小值时,我得到关于列表/arrayBooks的错误

# 回答3


程序中唯一知道返回的函数"LINES"在下面

选择 | 换行 | 行号
  1. if choice==1:
  2.          displayAll(populateBooks()) 

程序中的其他函数都不知道文件读取。您应该为这个程序使用一个类,因为您可以很容易地消除这些问题。
对于选项2,此函数不知道arrayBooks,只有main()函数知道,请参见
这里
有关传递参数的信息,请参见。

选择 | 换行 | 行号
  1.    elif choice==2:
  2.          displayShortest(arrayBooks)

一种解决办法是

选择 | 换行 | 行号
  1.  def displayBookMenu(arrayBooks):
  2.     print("\n1: Display All Books")
  3.     print("2: Display Shortest Book")
  4.     print("3: Display Longest Book")
  5.     print("3: Display Oldest Book")
  6.     print("4: Display Newest Book")
  7.     print("0: End")
  8.     choice = int(input("Choice: "))
  9.  
  10.     if choice==1:
  11.          displayAll(arrayBooks)  ## passed to the function
  12.     ...
  13.     etc.
  14.  
  15. print("Welcome!")
  16. arrayBooks = populateBooks()  ## catches the return
  17. displayBookMenu(arrayBooks)   ## passes the array to the function 

最后,我建议您在99页的文件中包含一些测试书,因为它不会打印您认为的最小值,因为您使用的是字符串(从左到右求值),而不是整数。

选择 | 换行 | 行号
  1. print min(["99", "250", "1001"]) 

标签: python

添加新评论