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
