我试图将我的世界一代从我的实际游戏中分离出来,因为我通常会失败。但由于某种原因,它一直坚持文件是空的/从它获得的变量是空的,有时,当我看后,实际的程序文件已经清空了文本文件的所有信息,有时不是。这是代码:
以下是主代码中文件处理的一小部分摘录:
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]))
瓦片类:
class Tile():
def __init__(self,location,surface):
self.location = location
self.surface = surface
错误:
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
很抱歉,如果这很明显。我也在使用pygame。
答案 0 :(得分:2)
输入文件中可能有空行;你想跳过这些。
您还可以简化平铺阅读代码:
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]
如果行中有:
个字符,则仅处理行,仅拆分一次,并在一个循环中创建WORLD
列表。
至于使用os.startfile()
:您正在后台启动另一个脚本。然后,该脚本会在生成新数据之前打开要写入的文件并明确清空该文件。 同时您正试图从该文件中读取。有可能你最终在那时读取一个空文件,因为另一个进程尚未完成生成和写入数据,并且当文件写入被缓冲时你将看不到 all 数据,直到其他进程关闭文件并退出。
此处不要使用os.startfile()
。改为导入其他文件; 导入时,代码将在中执行,保证文件关闭。