[portland] Solved Re: Array writing question from landscape ecologist

lintzh at science.oregonstate.edu lintzh at science.oregonstate.edu
Thu Mar 11 23:20:56 CET 2010


Okay, thanks!

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

and then

     outfile2=open(outfilename2,'w')
     for element in strdata4:
         outfile2.write(element)

The comma separation and format is okay for this application.

The enumerate function looks handy too, thank you again.

Cheers,
Heather











Quoting Jeff Schwaber <freyley at gmail.com>:

> 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
>>
>>
>




More information about the Portland mailing list