2016-04-06 4 views
-5

Ich habe versucht, meinen Code eine Textdatei für ein Produkt durch den Benutzer suchen zu suchen, aber es liest nur die erste Zeile, nicht die gesamte Datei, wie ich es möchte.Wie erhalten Sie Python, um eine ganze Textdatei zu lesen, nicht nur eine Zeile?

Hier ist mein Code:

order=input("Please enter the name of the product you wish to purchase\n") 
    myfile=open("barcode.txt","r") 
    details=myfile.readlines() #reads the file and stores it as the variable 'details' 
    for line in details: 
     if order in line: #if the barcode is in the line it stores the line as 'productline' 
      productline=line 
      quantity=int(input("How much of the product do you wish to purchase?\n")) 
      itemsplit=productline.split(' ') #seperates into different words 
      price=float(itemsplit[1]) #the price is the second part of the line 
      total=(price)*(quantity) #this works out the price 
      print("Your total spent on this product is: " +'£'+str(total)) 
     else: 
      break 
+0

Sie brechen aus der Schleife, wenn Sie die Reihenfolge in der ersten Zeile nicht finden können. – Selcuk

+0

Der Grund, warum Sie nur eine Zeile bekommen, ist, weil Sie sofort brechen – Tgsmith61591

+1

ändern Sie es mit 'pass' oder drücken Sie die Else-Anweisung – Whitefret

Antwort

0

Ihr waren aus der Schleife zu brechen:
(BTW habe ich eine mit statent für die Datei in einer pythonic Weise öffnen)

order = input("Please enter the name of the product you wish to purchase\n") 
with open("barcode.txt","r") as myfile: 
    details=myfile.readlines() #reads the file and stores it as the variable 'details' 
    for line in details: 
     if order in line: #if the barcode is in the line it stores the line as 'productline' 
      productline=line 
      quantity=int(input("How much of the product do you wish to purchase?\n")) 
      itemsplit=productline.split(' ') #seperates into different words 
      price=float(itemsplit[1]) #the price is the second part of the line 
      total=(price)*(quantity) #this works out the price 
      print("Your total spent on this product is: " +'£'+str(total)) 
+0

Wenn ich den Code ausführen, bekomme ich immer ein Fehlermeldung, dass die barcode.txt nicht gefunden wurde – EmDuff

+0

Haben Sie eine Datei mit dem Namen 'barcode.txt' im selben Verzeichnis erstellt? (Wenn nicht müssen Sie es erstellen) – Oisin

+0

Ich tat, könnte nur mein Computer sein, es hat vor kurzem gespielt. – EmDuff

0

Sie verwenden break, um die Schleife zu früh zu verlassen:

Sie wollen pass verwenden, wie @whitefret in den Kommentaren gesagt:

for line in details: 
     if order in line: 
      # do stuff 
     else: 
      pass #<--- this will continue the loop 

Oder Sie können einfach else ganz auslassen:

for line in details: 
     if order in line: 
      # do stuff 
+1

Ich denke, "continue" ist wahrscheinlich mehr im Einklang mit dem, was das OP erwartet (obwohl in diesem speziellen Fall ebenso redundant) – SpoonMeiser

3

Ihr Code brechen würde, nachdem die 1 Zeile markiert ist.

Sie haben

for line in details: 
    if order in line: 
     # Does stuff 
    else: 
     break 
     # This breaks out of the `for line in details` loop. 

Also, wenn der Auftrag nicht in der ersten Zeile ist, ist es die Schleife beendet.

Sie suchen höchstwahrscheinlich für verwandt etwas

for line in details: 
    if order in line: 
     # Do stuff 
     break # You want to break if you found the order 
    else: 
     continue 

Obwohl in diesem Fall der else: continue Zweig nicht benötigt wird, da man nichts planen, ausführen, wenn der Auftrag nicht gefunden wird.

Als Nebenwirkung unterstützen Dateien Iteration natürlich, so dass Sie tun müssen, um die nicht

folgende
myfile = open("barcode.txt", "r") 
details = myfile.readlines() 
# this line^can be removed, and you can just iterate over the file object itself 
for line in myfile: 
    # do stuff 

Vergessen Sie nicht, um die Datei zu schließen, wenn Sie fertig sind, mit myfile.close() oder alternativ verwenden ein Kontext-Manager wie

with open("barcode.txt", "r") as myfile: 
    for line in myfile: 
     # Do stuff 
# Once you go out of the `with` context, the file is closed for you 
0

Zum Lesen einer Datei finden Sie unter: https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects

fp = open(file_name) 
print fp.read() # prints all data in file name 

Wenige Vorschläge:

  • Nehmen Sie alle Eingaben gleichzeitig. # Nt wie Menge = int (Eingang („Wie viel von t“
  • alle Daten lesen auf einmal.
  • Nachdem Sie alle Variablen erhalten, beginnen jetzt auf Logik arbeiten.
  • brauchen Sie nicht zu tun „Produktlinie = line“
  • , wenn Sie 'else' nicht brauchen, nicht dann verwenden.

Check for Zen of Python, Python PEP8 und einige Programmierstandards und Stil.um den Code cool aussehen zu lassen.