[portland] Array writing question from landscape ecologist

Jeff Schwaber freyley at gmail.com
Thu Mar 11 22:30:14 CET 2010


On Thu, Mar 11, 2010 at 12:12 PM, <lintzh at science.oregonstate.edu> wrote:

> I commented out the lines you suggested and here is the new error:new last
> part of code:
>
> ##########################
> #RENAME DATA FOR WRITING
> #########################
>    os.chdir(resampleDIR)
>    h=filex.replace( '.', '_' )
>    outfilename=h+'.txt'
>    outfilename2=h+'NA.txt'
>    outfile2=open(outfilename2,'w')
>    data4.tolist(outfile2)
>
>
>
> ###################################
> #WRITE NEW DATA WITH HEADER ON TOP
> ###################################
>
>    os.chdir(resampleDIR)
>
> #try:
>    with open(outfilename,'w') as outfile:
>        outfile.write(header)
>        with open(outfilename2,'r') as datafile:
>            for line in datafile:
>                outfile.write(line)
>
> Error message for that:
>
>
> Traceback (most recent call last):
>  File "C:\PDSIwork\PYTHON_SCRIPTS\RESAMPLER2.py", line 65, in <module>
>    data4.tolist(outfile2)
> TypeError: tolist() takes exactly 0 arguments (1 given)
>

Heather,

tolist seems to convert the array to a list. So:

listdata4 = data4.tolist()

I would then expect listdata4 to be a list. Looking at the files, you're
trying to take a list

[1,2,3,4]

and get it into the file as

1,2,3,4

So the way you tried at the beginning could work now, if you convert the
list to a string first:

listdata4 = data4.tolist()
strdata4 = str(listdata4)
strdata4 = strdata4.replace('[', '').replace(']','')

But it might not be obvious to programmers not expecting that method.

You could do a for loop:

for element in listdata4:
    outfile2.write(element)

But putting in just the right number of commas is irritating. Still might be
the best way:

for i,element in enumerate(listdata4):
    if i:
        outfile2.write(', ')
    outfile2.write(element)

To explain that code:

for i,element in enumerate([1,2,3,4]):
    print i,e

prints out

0 1
1 2
2 3
3 4

And 0 is false, 1-3 are true.

I think there were other solutions in other emails, I just know it's hard to
figure out what's going on at the beginning.

Jeff


> Also, I attached the type of file I get (using slightly altered code) if I
> don't use NumArray, and I just read in a plain list, it is not the correct
> format for GIS to accept.
>
> Thank you,
> Heather
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/portland/attachments/20100311/7d190f35/attachment.html>


More information about the Portland mailing list