1

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.

1
  • 1
    pickle could also be a good way to get what you want Commented Jan 8, 2014 at 12:56

3 Answers 3

4

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]]
Sign up to request clarification or add additional context in comments.

3 Comments

Sorry about the n00by sound of this following comment... I've only briefly heard of pickle and its purpose before... Basically, will this allow me to save the list and then read it back in as a list without any other hassle??? If so, then I'm thinking this is the way to go... Thanks for the speedy response!
I added a demonstration to my answer.
You need to open the file in binary mode open('C:/temp/pickle_test.data', 'wb') the same with read open('C:/temp/pickle_test.data', 'rb')
0

You can do it using a simple eval

>>> x="[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]"
>>> type(x);
<type 'str'>
>>> y=eval(x);
>>> print(y);
[[0, 0, 0, 0, 0], [0, 1, 1, 1, 0], [0, 0, 0, 0, 0]]
>>>type(y);
<type 'list'>

It's a very quick and dirty solution, you should use more secure and good input files parsers (like pickle).

Comments

-2

For the transformation of a string to a list you could do something like this:

myList = [x for x in "0,1,2,3".split(",")]
type(myList)
<type 'list'>
print myList
['0', '1', '2', '3']

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.