Dateien in Python sind ohne Grund leer

Ich habe versucht, meine Weltgeneration von meinem wirklichen Spiel aufzuteilen, da ich normalerweise damit versuche. Aber aus irgendeinem Grund behauptet es, dass die Datei leer ist / die Variable, die von ihr gewonnen wird, ist leer, und manchmal, wenn ich danach schaue, hat die eigentliche Programmdatei die Textdatei mit allen Informationen geleert, manchmal nicht. Hier ist der Code:

Dropbox Hauptcode

Dropbox Welt Gen

Hier ist ein kleiner Auszug aus der Dateiverarbeitung im Hauptcode:

world_file = open("C:\Users\Ben\Documents\Python Files\PlatformerGame Files\World.txt", "r") world_file_contents = world_file.read() world_file.close() world_file_contents = world_file_contents.split("\n") WORLD = [] for data in world_file_contents: usable_data = data.split(":") WORLD.append(Tile(usable_data[0],usable_data[1])) 

Und die Fliesenklasse:

 class Tile(): def __init__(self,location,surface): self.location = location self.surface = surface 

Und der Fehler:

 Traceback (most recent call last): File "C:\Users\Ben\Documents\Python Files\PlatformerGame", line 89, in <module> Game.__main__() File "C:\Users\Ben\Documents\Python Files\PlatformerGame", line 42, in __main__ WORLD.append(Tile(usable_data[0],usable_data[1])) IndexError: list index out of range 

Sorry, wenn es offensichtlich ist. Auch ich verwende pygame.

One Solution collect form web for “Dateien in Python sind ohne Grund leer”

Sie haben wahrscheinlich leere Zeilen in Ihrer Eingabedatei; Du möchtest diese überspringen.

Sie können auch Ihren Fliesen Lesecode vereinfachen:

 with open("C:\Users\Ben\Documents\Python Files\PlatformerGame Files\World.txt", "r") as world_file: WORLD = [Tile(*line.strip().split(":", 1)) for line in world_file if ':' in line] 

Dies verarbeitet nur Zeilen, wenn es ein : Zeichen in ihnen gibt, spaltet nur einmal und erstellt die WORLD Liste in einer Schleife.

Wie für die Verwendung von os.startfile() : Sie starten das andere Skript im Hintergrund. Dieses Skript öffnet dann die Datei zu schreiben und explizit leert die Datei, bevor es neue Daten erzeugt. Gleichzeitig versuchst du, diese Datei zu lesen. Chancen sind Sie am Ende lesen eine leere Datei zu diesem Zeitpunkt, da der andere Prozess noch nicht fertig ist das Erstellen und Schreiben der Daten, und als Datei schreibt gepuffert werden Sie nicht sehen, alle Daten, bis der andere Prozess schließt die Datei Und geht aus.

Verwenden Sie os.startfile() überhaupt nicht hier. Importiere die andere Datei stattdessen; Dann wird der Code beim Import ausgeführt und die Datei wird garantiert geschlossen.

  • Python Nicht blockierte Datei lesen
  • Variable definieren nach Zuweisung von Wert in Python 2.7
  • Python ImportError: kann keine Utility importieren
  • Eine Alternative zu os.path.expanduser ("~")?
  • Laden Sie ein Element mit Python aus großer Jord-Datei
  • Suchdateien in allen Laufwerken mit Python
  • Echtzeit-Interrupts in Python
  • ValueError: konnte keine Zeichenfolge in float konvertieren: '1'
  • Warum verdrehen die Verarbeitungszeit?
  • Unicode-Suche funktioniert nicht
  • Wie man Python-Map-Funktion verwendet, um die ersten 100 Potenzen von zwei beginnend bei 0 und exklusive 100 zu generieren?
  • Python ist die beste Programmiersprache der Welt.