在Python文件是空无缘无故(Files in python are empty for no r

2019-10-18 11:09发布

我试图从我的实际游戏分手了我的世界产生的,因为我通常用它失败。 但由于某些原因,它一直坚持的文件是空的/从中获得的变量是空的,有时,当我看到以后,实际的程序文件已经清空了所有信息的文本文件,有时没有。 下面是代码:

Dropbox的主要代码

Dropbox的世界根

这里只是文件中的主要代码中处理的小摘录:

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的。

Answer 1:

你可能在你输入文件的空行; 你想跳过这些。

您还可以简化您的瓷砖阅读的代码:

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()你是在后台启动其他脚本。 该脚本然后打开写入文件和显式清空文件,它会生成新的数据之前。 同时,您试图从该文件中读取。 机会是你最终读数当时一个空文件,因为其他进程尚未完成发电和写入数据,并作为文件写入进行缓冲,你不会看到所有的数据,直到其他进程关闭文件并退出。

不要使用os.startfile() 的都在这里。 导入其他文件代替; 然后该代码将导入期间被执行,该文件是保证被关闭。



文章来源: Files in python are empty for no reason