2017-09-18 1 views
1

Je suis encore novice en python mais je l'utilise pour mes recherches en linguistique.classe de flux de la liste

alors je fais des recherches sur la toponymie, et je me suis une liste de données d'entrée d'une institution topographique, qui ressemble à ce qui suit: Official_Name, onglet, Dialect_Name, onglet, Administrative_district, Topographic_district, Y_coordinates, X_coordinates, Longitude , Latitude.

Alors, je définissais une classe:

class MacroTop: 
     def __init__(self, Official_Name, Dialect_Name, Adm_District, Topo_District, Y, X, Long, Lat): 
      self.Official_Name = Official_Name 
      self.Dialect_Name = Dialect_Name 
      self.Adm_District = Adm_District 
      self.Topo_District = Topo_District 
      self.Y = Y 
      self.X = X 
      self.Long = Long 
      self.Lat = Lat 

Ainsi, avec open(), je voulais charger mon fichier .txt avec les données que je dois le lire dans la classe en utilisant une boucle, mais il ne fonctionne pas. Le résultat que je veux est d'être en mesure d'accéder à une caractéristique de la classe, disons, Dialect_Name et être capable de regarder à travers toutes les entrées de cette fonctionnalité. Je peux le faire juste dans la boucle, mais je voulais définir une classe afin que je puisse faire plus de manipulation après.

ma boucle:

with open("locLuxAll.txt", "r") as topo_list: 
    lines = topo_list.readlines() 
    for line in lines: 
     line = line.split('\t') 
     print(line) 
     print(line[0]) # This would access all the data that is characterized as Official_Name 

j'ai essayé de faire une autre boucle:

for i in range(0-len(lines)): 
     lines[i] = MacroTop(str(line[0]), str(line[1]), str(line[2]), str(line[3]), str(line[4]), str(line[5]), str(line[6]), str(line[7])) 

Mais cela ne semble pas fonctionner.

Répondre

0

Cette ligne échoue:

for i in range(0-len(lines)): 

Vous essayez de boucle à travers nombre négatif, je suppose, de sorte que la sortie sera une liste vide.

In [11]: [i for i in range(-200)] 
Out[11]: [] 

EDIT: Votre code semble illisible pour moi, mais vous avez for i in range(len(lines)) dans cette boucle for, nous parcourons la variable line, où est-elle? Tout d'abord, je ne reviendrai pas à la liste lines car elle provient de readlines. Créer une nouvelle liste pour cela, et vous n'avez pas besoin de i variable, ces lignes seront conservées dans l'ordre de toute façon.

class_lines = [] 
for line in lines: 
    class_lines.append(MacroTop(str(line[0]), str(line[1]), str(line[2]), str(line[3]), str(line[4]), str(line[5]), str(line[6]), str(line[7]))) 

Ou même avec la compréhension de la liste:

class_lines = [MacroTop(str(line[0]), str(line[1]), str(line[2]), str(line[3]), str(
    line[4]), str(line[5]), str(line[6]), str(line[7])) for line in lines] 
+0

Oh, je vois l'erreur là. Changement à la plage (len (lignes) .Mais encore, la sortie n'est pas ce que je voulais car la classe n'est pas alimentée par les données.All plus d'idées? – MSam

+0

@MSam il y a une erreur de logique dans votre code initial, mais s'il vous plaît vérifier mon réponse mise à jour si cela aide – Pythonist

+0

Mybe Je devrais rectifier ma recherche initiale, je pense que je n'ai pas bien exprimé – MSam