On Tue, May 18, 2010 at 7:58 AM, anita kean <[email protected]> wrote:
> On Mon, May 17, 2010 at 09:29:51PM -0700, Jen wrote:
>> Thank you for the comments, that's very helpful.
>>
>> I have 56 shapefiles, and I need to calculate area for each one.
>> Therefore, could you explain the first method clearer: "to use the
>> script as is, run it from the command line with the full path to the
>> shapefile you want to calculate the area, e.g. from the command
>> line:" ?
>>
>> I'd appreciate any help you might give me.
>
> If you've got 56 shapefiles (say they're called shape1,shp, ...  shape56.shp),
> then you are either going to have to call the program
> 56 times with 56 different shapefile names:
>
>    python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape1.shp
>    python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape2.shp
>    python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape3.shp
>    python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape4.shp
>    python LU_PL_Exportcoef.py C:\path\to\shapefile\folder\shape5.shp
>    ...
>    python LU_PL_Exportcoef.py C:\path\to\shapefile\f older\shape56.shp
>
> (that looks like too much work!)
>
> or you could get python to do the work for you:
>
> If it were me, to make it easy for myself, I'd
> put all the shapefiles in one folder,
> copy the python program to the same folder,
> and in that folder, write a little python file like :
>
> ============================
> import os
> import subprocess
>
> rootdir = os.getcwd()
> files = os.listdir(rootdir)
> for f in files:
>    if os.path.splitext(f)[1]=='.shp':
>        print 'shapefile', f
>        shapefile_area =  subprocess.call(['python','LU_PL_Exportcoef.py',f])
>        print 'area of %s is %s' % (f, shapefile_area)
> ============================
>
> Then if you call this file get_area.py,
> all you have to do is type, in that same folder,
>
> python get_area.py
>
> and you should see the areas associated with all 56 shapefiles.
>  - assuming your LU_... program prints out what you need.
>
> Hope that helps.
> --
> Anita
>

This is a good start, but I don't think subprocess is the way to go
here. If your geoprocessing program was a C program or a Perl script,
you would well make a system call to it. If it's Python code, and
arcgisscripting in particular, it's better to stay in one Python
process and call a Python function instead. This approach avoids the
overhead of starting a new Python interpreter (not inconsiderable) or
ArcGIS geoprocesser (very considerable overhead, I am told) for each
shapefile.

Cheers,

-- 
Sean

Reply via email to