2017-01-04 3 views
0

Ich bin noch neu in Datei-I/O in Python, und so habe ich einige Probleme mit herauszufinden, wie man nach einer bestimmten Variable in einer Datei suchen.Datei-Iteration und Variablensuche

Dies ist die Datei Ich öffne (txt-Typ):

grelha = [['O', 'H', 'L', 'E', 'M', 'R', 'R', 'V', 'U'], 

      ['B', 'B', 'R', 'A', 'N', 'C', 'O', 'Z', 'A'], 

      ['S', 'R', 'A', 'M', 'S', 'U', 'P', 'A', 'O'], 

      ['A', 'A', 'B', 'A', 'P', 'O', 'T', 'Z', 'Z'], 

      ['L', 'N', 'Z', 'R', 'O', 'E', 'R', 'N', 'U'], 

      ['I', 'U', 'I', 'E', 'P', 'D', 'O', 'I', 'I'], 

      ['L', 'O', 'L', 'L', 'O', 'R', 'A', 'C', 'A'], 

      ['I', 'T', 'M', 'O', 'T', 'E', 'R', 'P', 'P'], 

      ['L', 'I', 'E', 'A', 'Z', 'V', 'Y', 'U', 'U']] 
palavras = ['branco','preto','azul','verde','rosa','amarelo','vermelho','cinza','lilas'] 

Und das ist der Code, den ich habe:

def file(): 
    game_file = open(str(input("What is the name of the file?")), "r+") 
    for i in game_file: 
     if i == 'grelha':#"I've tried without it being a string as well" 
      print (i)  

Soweit ich es isn herausfinden konnte Es gibt keine Methode, die mir dabei helfen kann, und ich verstehe auch nicht ganz, wie die Iteration in diesem Fall funktioniert.

Wenn mir jemand mit diesem Problem helfen könnte und die Iteration erklären würde das großartig sein!

+1

Können Sie den genauen Inhalt der Datei anzeigen, die Sie öffnen? Sie scheinen zu erwarten, dass die Datei als Python analysiert wird. –

+0

Was meinen Sie, Sie suchen nach dieser Variable in der Datei – Natecat

+1

Sie müssen _serialize_ Ihre Variable in Ihrer Datei _serialize_. Speichern der Variable als regulären Text ist nicht der Weg zu gehen. Ich nehme einen Blick auf das Modul "Pickle" (https://docs.python.org/3/library/pickle.html). –

Antwort

0

standardmäßig python-Datei Zeile lesen, so dass Ihre if i == 'grelha' nichts bekommen.

Wenn Sie die Zeile mit palavras beginnen finden möchten, können Sie startwith() Methode verwenden:

In [3]: for line in file: 
    ...:  if line.startswith('palavras'): 
    ...:   print line 
    ...:   
palavras = ['branco','preto','azul','verde','rosa','amarelo','vermelho','cinza','lilas'] 

Für Datei, Iteration arbeitet zeilen; Für str arbeitet Iteration char by char;

Im Allgemeinen python behandeln Datei als Zeichenfolge, so dass Sie nicht Python-Code in Datei schreiben können, ist die Zeile palavras = ['branco','preto','azul','verde','rosa','amarelo','vermelho','cinza','lilas'] Zeichenfolge, nicht Code. Sie müssen sie immer noch analysieren.

+0

Vielen Dank! Das hat gut funktioniert! :) –

1

Was Sie tun, scheint naiv anzunehmen, dass, nur weil der Dateiinhalt gültig Python ist, wird das Öffnen mit Python es als Python analysieren. Dies ist absolut nicht der Fall. Sie müssen ein Format für die Speicherung Ihrer Daten wählen, damit sie korrekt interpretiert werden können, wenn Sie sie wieder einlesen müssen.

Sie könnten JSON beispielsweise als perfekte Methode zum Speichern dieser Art von strukturierten Daten finden:

{"grelha": [["O", "H", "L", "E", "M", "R", "R", "V", "U"], ["B", "B", "R", "A", "N", "C", "O", "Z", "A"], ["S", "R", "A", "M", "S", "U", "P", "A", "O"], ["A", "A", "B", "A", "P", "O", "T", "Z", "Z"], ["L", "N", "Z", "R", "O", "E", "R", "N", "U"], ["I", "U", "I", "E", "P", "D", "O", "I", "I"], ["L", "O", "L", "L", "O", "R", "A", "C", "A"], ["I", "T", "M", "O", "T", "E", "R", "P", "P"], ["L", "I", "E", "A", "Z", "V", "Y", "U", "U"]], "palavras": ["branco", "preto", "azul", "verde", "rosa", "amarelo", "vermelho", "cinza", "lilas"]} 

Dann können Sie es in Ihrem Programm mit der eingebauten in JSON-Modul lesen:

import json 

with open('f.json') as f: 
    data = json.loads(f.read()) 
print data['grelha'] 
+0

Ich versuchte dies, aber es scheint nicht zu erkennen, die JSON-Modul Wenn es so ist, habe ich ein paar verschiedene Wege ausprobiert und versucht, dorthin zu gelangen, aber es schien nicht zu funktionieren. –

+0

Der Code, den ich eingefügt habe, funktioniert so wie er ist. Wenn Ihre Daten komplexer werden, wird es immer schwieriger, ein eigenes Parsing-System zu erstellen, wie es @ scriptboys Antwort vorschlägt. Denken Sie daher an "json" als leistungsstarkes, flexibles Modell zum Beschreiben strukturierter Daten außerhalb Ihres Anwendungscodes. –