2017-03-13 3 views
0

Ich experimentiere derzeit mit einigen grundlegenden Python. Ich versuche, 4 verschiedene Informationen aus einem .txt-Dokument in Python zu importieren. Von dort werde ich alles aufteilen, es zu einem Datensatz hinzufügen. Danach möchte ich den Benutzer fragen, ob er dem Datensatz einen weiteren Eintrag hinzufügen möchte oder nicht. Wenn dies der Fall ist, erlauben Sie ihnen, die erforderlichen Informationen einzugeben und sie als neuen Eintrag in der Datei zu speichern.Importieren von Informationen aus Datei in Datensatz (Python 3.2.1.1)

Ich habe einen Code geschrieben, der den Benutzer bittet, jede Information einzeln einzugeben, aber jedes Mal die gleiche Sache eingegeben hat und es wurde wirklich nervig. Es funktionierte perfekt, hier ist sie:

names = [] 
ages = [] 
years = [] 
schools = [] 
Member = [] 

for loop in range(0,2): 
    name = input("Please enter a name") 

    age = int(input("Please enter an age")) 
    while age <= 0 or age >= 100: 
     age = int(input("Please re-enter your age, between 0 and 100")) 

    year = int(input("Please enter your school year")) 
    while year <= 1 or year >= 6: 
     year = int(input("Please enter a valid school year, between 1 and 6")) 

    school = input("Please enter your school") 

    names.append(name) 
    ages.append(age) 
    years.append(year) 
    schools.append(school) 

    member = [names[loop], ages[loop], years[loop], schools[loop]] 
    Member.append(member) 

    Members = [Member] 

print(Members) 

Das Problem, das ich gestoßen war, als ich versuchte, mehrere, einzelne Strings und Zahlen einzugeben, die ich zu verschiedenen Arrays hinzuzufügen fehlte, wie oben. Hier ist der Code für die:

with open('Record.txt','r') as scores: 
    data = scores.readlines() 

names = [""]*len(data) 
ages = [0]*len(data) 
years = [0]*len(data) 
schools = [""]*len(data) 
Member = []*len(data) 

counter = 0 

for loop in range(0,len(data)): 
    data[loop] = data[loop][0:-1] 
    x = data[loop].rfind(",") 
    names[loop] = data[loop][:x] 
    print(names) 
    ages[loop] = int(data[loop][x:]) 
    years[loop] = int(data[loop][x+1:]) 
    schools[loop] = data[loop][x+2:] 

    member = [names[loop], ages[loop], years[loop], schools[loop]] 
    Member.append(member) 

-I-Fehler (Zeile 28) Ich war immer war:

ValueError: invalid literal for int() with base 10: ', Viewforth'

Hier ist die Datei, die ich aus lese (nach "Viewforth" gibt es eine neue Zeile) :

Harris, 16, 5, Viewforth

Cody, 16, 5, Viewforth

William, 16, 5, Viewforth

Ross, 17, 6, Viewforth

Nur um zu klären, ich will alles retten vor dem ersten Komma „Namen“, zwischen Komma 1 und 2 „altert“, 2 und 3 auf „Jahre“ und alles nach dem dritten " Schulen".

Danke für Ihre Hilfe vor,

  • Harris

Antwort

1

Das Problem in dieser Zeile: ages[loop] = int(data[loop][x:]) ist, dass data[loop][x:] eine Zeichenfolge, die ', Viewforth' endet als, was zu einem int konvertiert werden können.

Ich bin nicht genau sicher, was Sie mit dem gesamten String-Slicing zu tun versuchen, aber es wäre viel einfacher, einfach split() mit dem Trennzeichen von Kommas, um eine Liste der Elemente in jeder Zeile zu erhalten. Etwas Zeile folgendes:

items_in_line = line.split(',') 
names.append(items_in_line[0]) 
ages.append(items_in_line[1]) 
years.append(items_in_line[2]) 
schools.append(items_in_line[3]) 
+0

Ich habe versucht, Ihren Vorschlag, aber es gibt ein paar Dinge, die ich lief. Zuallererst glaube ich, dass es "Daten" anstelle von "Zeile" hätte sein sollen, da die Zeile zuerst deklariert werden müsste. Die zweite davon ist der Fehler "'list' object hat kein Attribut 'split'". Ich denke, das liegt daran, dass Listen in Python keine Split-Methode haben. Irgendwelche mehr Rückgespräch würden geschätzt. – Chloroform

+0

'line' ist die tatsächliche Zeichenfolge, die Sie von einer Zeile in der Datei erhalten (mit etwas wie [readline] (https://docs.python.org/2/tutorial/inputoutput.html#methods-of-file-objects)). Ich würde empfehlen, jede Zeile auf einmal zu machen, anstatt readlines() zu verwenden und alle Zeilen aus der Datei auf einmal zu holen (was "Daten" gerade sind). – Avantol13

Verwandte Themen