2016-08-22 4 views
1

Lesen Ich habe eine Textdatei mit 5 Spalten:eine Textdatei und die Zuordnung der Werte

StudentID UserID FirstName LastName NickName 
0122334  7727263 John   Smith  Johnny 
8273263  8349734 timmer  Jansen  tim 

Ich versuche, diese Datei in Python zu lesen und zu jedem der Werte zuweisen Variable zu trennen. Bis jetzt habe ich die Zeilen erfolgreich gelesen. Aber ich kann die Werte nicht zuweisen.

-Code bisher:

StudentID = [] 
UserID = [] 
FirstName = [] 
LastName = [] 
NickName = [] 

with open(textfile,'r') as f: 
    lines = f.readlines() 

Antwort

1
f = open(textfile, 'r') 
for line in f: 
    student_id, user_id, first_name, last_name, nick_name = line.split(' ') 
StudentId.append(student_id) 
UserId.append(user_id) 
.... 
f.close() 

Das ist sehr seltsame Art und Weise ist aber etwas zu schreiben. Viel bessere Weg ist Klasse Schüler zu schaffen, die die Eigenschaften der Schüler wissen und wie von Zeile lesen

class Student: 
    def __init__(self, student_id=0, user_id=0, first_name='', last_name='', nickname=''): 
     self._student_id = student_id 
     self._user_id = user_id 
     ... 

    def from_line(self, line): 
     values = line.split(' ') 
     self._student_id = int(values[0]) 
     self._user_id = int(values[1]) 
     ... 

f = open(textfile, 'r') 
students = [] 
for line in f: 
    students.append(Student()) 
    students[-1].from_line(line) 
1
with open(textfile,'r') as f: 
    for line in f.readlines(): 
     student_id ,user_id, first_name, last_name, nick_name = line.split() 
     StudentID.append(student_id) 
     UserID.append(user_id) 
     FirstName.append(first_name) 
     LastName.append(last_name) 
     NickName.append(nick_name) 

Hinweis: Für die Liste der Benennung Sie Camel Fall Konvention verwenden. In Python, wie per PIP8 zum Definieren der Variablen sollten Sie Kleinbuchstaben Alphabete getrennt durch den Unterstrich _ verwenden. CamelCase-Variablen dienen zum Definieren der Klassen.

Vorschlag:

Da diese Werte zum selben Objekt gehören, sollten Sie eine einzige Liste von Objekten werden beibehalten, wie Dmitry vorgeschlagen OR, einfach speichern eine Liste von list.

Zum Beispiel:

persons = [] 
with open(textfile,'r') as f: 
    for line in f.readlines(): 
     persons.append(line.split()) 

print persons 
# [['0122334', '7727263', 'John', 'Smith', 'Johnny'], 
# ['8273263', '8349734', 'timmer', 'Jansen', 'tim']] 

Hier finden Sie StudentID, UserID, FirstName, LastName, NickName bei 0, 1, 2, 3, 4 bzw. 5 Index.

+1

'für Element, Sammlung in zip (line.split(), [StudentID, BenutzerID, Vorname, Nachname, Spitzname]): collection.append (Element)' –

+0

@Steven: Fügen Sie es als Antwort hinzu. Es wird für andere hilfreich sein. –

3

Sie können alle von ihnen auf einmal extrahieren:

with open(textfile,'r') as f: 
    columns = [line.split() for line in f.readlines()] 

Und dann jede Liste erstellen von columns:

StudentID, UserID, firstNAme, LastNAme, NickName = map(list, zip(*columns)) 

Zuerst Sie eine Liste von Listen zu erstellen, die eine Matrix von Ihrem gegeben getrennt ist Spalten Zeile für Zeile. Und dann gruppieren (ordnen) Sie sie neu, indem Sie für jede Spalte eine getrennte Liste erstellen.

Verwandte Themen