熵变模拟软件pkl文件读取内容为空

我用python3编了一个系统熵变模拟软件,改了几次运行后使用另一个读取器读取产生的结果显示模拟器产生的结果为空,不知道是显示系统错了还是软件错了、怎么改错。现在代码已经有240行了,注意调试认真点,主要代码在类里。

超级模拟器.py:

import platform
import random
import pickle
import ctypes
import os
debug = 1


class Main:
    def __init__(self):
        self.speed = random.uniform(1, 4)
        self.data = []
        self.size = random.randint(5, 10)
        for i in range(1, self.size+1):
            self.data.append([0 for i in range(round(i*self.speed))])
        self.now = 0

    def nock(self):
        try:
            exec("self.data[self.now]")
        except:
            return 2
        try:
            self.data[self.now][len(self.data[self.now]) - 1]
        except:
            return 1
        num = 0
        for i in self.data[self.now]:
            if i != 0:
                num += 1
        if num > self.size // 2:
            if self.data[self.now][len(self.data[self.now]) - 1] != 0:
                self.now += 1
        try:
            range(len(self.data[self.now]))
        except:
            pass
        else:
            for i in range(len(self.data[self.now])):
                if self.data[self.now][i] != 0:
                    self.data[self.now][i][0] += 1
                    self.data[self.now][i][1] += random.randint(-1, 1)
                    if self.data[self.now][i][0] >= self.data[self.now][i][1]:
                        self.data[self.now][i] = 0
                    if self.data[self.now][i] != 0:
                        if self.data[self.now][i][0] > 18:
                            if self.data[self.now][i][0] / self.data[self.now][i][1] > 0.6:
                                if self.data[self.now][i-1] != 0:
                                    self.data[self.now][i-1][0] += 10
                                    self.data[self.now][i][0] -= 10
                                    self.data[self.now][i][2].append(self.data[self.now][i-1])
                                if self.data[self.now][i+1] != 0:
                                    self.data[self.now][i+1] += 10
                                    self.data[self.now][i] -= 10
                                    self.data[self.now][i][2].append(self.data[self.now][i+1])
                                if not all(self.data[self.now][i][2]):
                                    if self.data[self.now].find(self.data[self.now][i][2]) != -1:
                                        self.data[self.data[self.now].index(self.data[self.now][i][2])][0] += 10
                                        self.data[self.now][i][0] -= 10

    def insert(self):
        live = self.size / (self.now * self.size / 2 + 1) + random.randint(-5, 5)
        index = []
        try:
            self.data[self.now]
        except IndexError:
            return 1
        for i in range(len(self.data[self.now])):
            if self.data[self.now][i] == 0:
                index.append(i)
        if index != []:
            i = random.choice(index)
            self.data[self.now][i] = [0, live, [], {}]
            for j in range(20):
                key = j + 1
                value = random.randint(1, 9)
                self.data[self.now][i][3][key] = value
    def connect(self):
        temp1 = []
        try:
            self.data[self.now]
        except IndexError:
            return 1
        for i in range(len(self.data[self.now])):
            if self.data[self.now][i] != 0:
                temp1.append(i)
        connnum = []
        for i in temp1:
            connnum.append(len(self.data[self.now][i][2]))
        if connnum == []:
            return 2
        temp3 = min(connnum)
        for temp2 in range(len(self.data[self.now])):
            if self.data[self.now][temp2] == 0:
                return 2
            if len(self.data[self.now][temp2][2]) == temp3:
                break
        big = random.randint(2, 5)
        small = -big
        for i in range(small, big):
            try:
                if self.data[self.now][temp2 + i] != 0:
                    if random.randint(0, 1):
                        self.data[self.now][temp2][2].append(self.data[self.now][temp2 + i])
            except IndexError:
                pass

    def move(self):
        temp1 = []
        for i in range(len(self.data[self.now])):
            if self.data[self.now][i] != 0:
                temp1.append(i)
        if temp1 != []:
            temp2 = random.choice(temp1)
            temp3 = []
            for i in range(len(self.data[self.now])):
                if self.data[self.now][i] == 0:
                    temp3.append(i)
            temp4 = random.choice(temp1)
            self.data[self.now][temp4] = self.data[self.now][temp2]
            del self.data[self.now][temp2]

    def newinfo(self):
        for i in range(len(self.data[self.now])):
            if self.data[self.now][i] != 0:
                if len(self.data[self.now][i][2]) != 0:
                    temp = i
                    break
        if "temp" in dir():
            for i in os.listdir(r"C:\Users\CK\Desktop"):
                if i.find(".txt") != -1:
                    _data_ = open(rf"E:\entropy\{i}", encoding="utf-8").read()
                    break
            if "_data_" in dir():
                self.data[self.now][temp][3][random.randint(1, 9)] = random.choice(_data_.splitlines())
            if "temp" in dir():
                try:
                    self.data[self.now].index(random.choice(self.data[self.now][temp][2]))
                except:
                    pass
                else:
                    try:
                        self.data[self.now].index(random.choice(self.data[self.now][temp][2]))
                    except:
                        pass
                    else:
                        try:
                            self.data[self.now].index(random.choice(self.data[self.now][temp][2]))
                        except:
                            pass
                        else:
                            try:
                                self.data[self.now].index(random.choice(self.data[self.now][temp][2]))
                            except:
                                pass
                            else:
                                try:
                                    self.data[self.now].index(random.choice(self.data[self.now][temp][2]))
                                except:
                                    pass
                                else:
                                    index1 = self.data[self.now].index(random.choice(self.data[self.now][temp][2]))
                                    for i in range(random.randint(5, 10)):
                                        index2 = random.randint(1, 20)
                                        index3 = random.randint(1, 20)
                                        temp1 = self.data[self.now][temp][3][index2]
                                        self.data[self.now][index1][3][index2] = temp1
                                        temp2 = self.data[self.now][index1][3][index2]
                                        self.data[self.now][temp][3][index2] = temp2
                                        self.data[self.now][index1][1] += 1

    def run(self):
        for i in range(self.size//3*2):
            self.insert()
        self.nock()
        i = 1
        for i in range(self.size ** 2):
            if self.now > self.size:
                return self.data
            entropy = 0
            for i in range(len(self.data)):
                for j in range(len(self.data[i])):
                    try:
                        entropy += self.data[i][j][0]
                    except:
                        pass
            if random.uniform(0, 1) < (self.size / 2) / i:
                 if self.insert() == 1:
                     return self.data
            if random.uniform(0, 1) < i/self.size:
                if self.connect() == 1:
                    return self.data
            if random.uniform(0, 1) < i/self.size/1.75:
                self.newinfo()
            if random.uniform(0, 1) < i/self.size/2.5:
                self.move()
            self.nock()
        return self.data


def gls(folder):
    """
    获取磁盘剩余空间
    :param folder: 磁盘路径 例如 D:\\
    :return: 剩余空间 单位 G
    """
    folderTemp = folder
    if not os.path.exists(folderTemp):
        folderTemp = os.getcwd()
    if platform.system() == 'Windows':
        free_bytes = ctypes.c_ulonglong(0)
        ctypes.windll.kernel32.GetDiskFreeSpaceExW(ctypes.c_wchar_p(folderTemp), None, None, ctypes.pointer(free_bytes))
        return free_bytes.value / 1024 / 1024 / 1024
    else:
        st = os.statvfs(folderTemp)
        return st.f_bavail * st.f_frsize / 1024 / 1024


if __name__ == "__main__":
    x = 0
    while gls("E:") > 0.75:
        with open(r"E:\entropy\001.num", "r") as f:
            num = int(f.read())
        with open(r"E:\entropy\001.num", "w") as f:
            f.write(str(num + 1))
        while True:
            datas = []
            try:
                main = Main()
                datas.append(main.run())
            except:
                if debug:
                    print(f"stop in {x} to save!!!count to {x}...")
                break
            x = x + 1
            if debug:
                print(f"no.{x} made from com.{id(main)}")
            with open(fr"E:\entropy\{num}.pkl", "wb") as f:
                pickle.dump(datas, f)





```python
读取模拟器.py:
from tkinter.filedialog import *
from tkinter import *
import pickle
import re
import os


root = Tk()
t1 = Text()
t1.pack()
data = []
file = ""


def op_en():
    global file
    global data
    file = askopenfilename()
    with open(file, "rb") as f:
        data = pickle.load(f)


def getinfo():
    for k in data:
        for i in range(len(k)):
            for j in range(len(k[i])):
                if k[i][j] != 0:
                    t1.insert(END, f"age:{k[i][j][0]}\tlife:{k[i][j][1]}\n")
                    t1.insert(END, f"friend:{k[i][j][2]}\tdata:{k[i][j][3]}\n\n")
    if os.path.isfile(file):
        os.remove(file)


def draw():
    for d in data:
        for i in range(len(d)):
            for j in range(len(d[i])):
                if d[i][j] == 0:
                    t1.insert(END, chr(1))
                else:
                    t1.insert(END, "■")
            t1.insert(END, "\n")
        t1.insert(END, "\n\n")
    if os.path.isfile(file):
        os.remove(file)


Button(root, text="打开", command=op_en).pack()
Button(root, text="信息", command=getinfo).pack()
Button(root, text="绘图", command=draw).pack()
Button(root, text="清空", command=lambda:t1.delete(0.0, END)).pack()
mainloop()


超级模拟器:

no.1 made from com.30294672
no.2 made from com.59649200
no.3 made from com.31998992
no.4 made from com.30325136
no.5 made from com.30294672
no.6 made from com.30325136
no.7 made from com.30294672
no.8 made from com.59646576
no.9 made from com.30294672
no.10 made from com.59646352
no.11 made from com.30294672
no.12 made from com.59646352
no.13 made from com.59649200
no.14 made from com.59646352
no.15 made from com.30395536
no.16 made from com.30395696
no.17 made from com.30395856
no.18 made from com.30395504
no.19 made from com.30395792
no.20 made from com.30395504
no.21 made from com.59646576
no.22 made from com.30294672
stop in 22 to save!!!count to 22...
no.23 made from com.30294672
no.24 made from com.30325392
no.25 made from com.59649232
no.26 made from com.30325392
no.27 made from com.59649168
no.28 made from com.59649200
no.29 made from com.30395824
no.30 made from com.59649232
no.31 made from com.30395824
no.32 made from com.30395472
no.33 made from com.30395792
no.34 made from com.30395472
no.35 made from com.30395792
no.36 made from com.30395472
no.37 made from com.30395792
no.38 made from com.30395760
no.39 made from com.30395792
no.40 made from com.30395696
no.41 made from com.30396016
no.42 made from com.30395472
no.43 made from com.30396016
no.44 made from com.30395696
no.45 made from com.30395856
no.46 made from com.30396048
no.47 made from com.30395856
no.48 made from com.30395696
stop in 48 to save!!!count to 48...
no.49 made from com.30396112
no.50 made from com.30395728

读取模拟器.py:

img

由于软件不改时很多格子是空的,所以进行了更改,但更改后软件生成结果里读取出是全空的。我尝试减少代码中被隐藏的错误,开始调试,之后出现很多错误。调试完成后,软件就读取不出任何数据了,我觉得是模拟器的问题,但是调试不出到底是什么问题。于是尝试继续改错,最后问题没有解决,代码就已经240行了,记得也检查读取器的问题,不知道适不适用这个软件,因为也在模拟器上看到过问题没有解决(模拟器产生了多个系统, 但读取器绘图只有一个系统被读。)。

我想要的结果是模拟器的结果不变,读取器按绘图后能显示很多黑格(读取器读取的是模拟器产生的文件,pkl后缀名。)。