Search code examples
pythonarrayslistsave

How to save 2D arrays (lists) in Python?


I need to save a 2D array representing a map in the game world to a configparser. The data looks like this:

[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]

As an example.

I can obviously save the data but I can't convert it from a string back to a list after reading it back in...

I don't mind if I have to use a .txt file instead, by the way, and just read it in with the normal text file handler.


Solution

  • Python has a module for saving Python data called pickle. You can use that. From the docs:

    The pickle module implements a fundamental, but powerful algorithm for serializing and de-serializing a Python object structure. “Pickling” is the process whereby a Python object hierarchy is converted into a byte stream, and “unpickling” is the inverse operation, whereby a byte stream is converted back into an object hierarchy. Pickling (and unpickling) is alternatively known as “serialization”, “marshalling,” or “flattening”, however, to avoid confusion, the terms used here are “pickling” and “unpickling”.

    Demo:

    >>> import pickle
    >>> data = [[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]
    >>> with open('C:/temp/pickle_test.data', 'wb') as f:
            pickle.dump(data, f)
    
        
    >>> with open('C:/temp/pickle_test.data', 'rb') as f:
            new_data = pickle.load(f)
    
        
    >>> new_data
    [[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]