Background: I am working on a Python project where, given a set of input files (text/image/audio), it generates an executable game. The text files are there to describe the rules of the game.

Currently, the program reads and parses the files upon each startup, and builds a Python class that contains these rules, as well as links to image/audio files. This is fine for now, but I don’t want the end executable to have to bundle these files and re-parse them each time it gets run.

My question: Is there a way to persist the instance of my class to disk, as it exists in memory? Kind of like a snapshot of the object. Since this is a Python project, my question is specific to Python. But, I’d be curious if this concept exists anywhere else. I’ve never heard of it.

My aim is not to serialize/de-serialize the class to a text file, but instead load the 1’s and 0’s that existed before into an instance of a class.

  • UnfortunateShort@lemmy.world
    link
    fedilink
    arrow-up
    13
    ·
    10 days ago

    I think pickle is what you want.

    Keep in mind that this might have a huge performance impact if you do it all the time - it’s still IO even when it’s not parsing.

    • spacemanspiffy@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      4
      ·
      10 days ago

      My idea would be to load one larger file one time and not parse anything, and keep it in memory the entire time. Versus what it does now which is load the files and parse them and keep everything in memory.

      But three people responding here so far with “pickle” so maybe that is the way.

      • UnfortunateShort@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        9 days ago

        You can stuff all the info into an object and use it this way, no problem. I just wanted to point out that this doesn’t have zero performance impact compared to what you currently have.

        So (depending on how your OS caches files) you might not want to do this like twice in a lambda that you pass to an iterator over a huge slice or something.