A problem with list

Roy Smith roy at panix.com
Mon Dec 13 10:33:07 EST 2004


<export at hope.cz> wrote:
>but when I have Mylist in a file and I read it from the file it does
>not work as I expect.
>#########
>import string
>ff=open('C:\\Robotp\\MyFile.txt','r') # read MyList from a file
>MyList=ff.read()
>for i in MyList:
>print i
>###########
>I will get
>[
>'
>a
>b
>c
>'
>,
>'
>d
>e
>f
>'
>]
>
>where my MyFile.txt looks like this:
>['abc','def']

The problem is that read() just reads in characters of text and stores
them in a string.  It doesn't *execute* that text as if it were a
program.  You want to do one of two things.  The first, which requires
no changes to your file, would be to eval the text you read.  For
example:

>>> s = "['foo', 'bar']"
>>> s
"['foo', 'bar']"
>>> type (s)
<type 'str'>

s is a string containing the printed representation of a list.  You
turn that into a real list by passing the string to eval()

>>> l = eval (s)
>>> l
['foo', 'bar']
>>> type (l)
<type 'list'>

Alternatively (and probably the direction you want to be looking), is
to alter your file a little and import it.  Make your file look like:

x = ['abc', 'def']

Assuming the filename is "foo.py", you can do "import foo" and your
file will be read AND EXECUTED, and a module will be created with the
same name as the basename of the file.  The variable x will be a
variable inside that module:

>>> import foo
>>> foo.x
['abc', 'def']



More information about the Python-list mailing list