POST
|
Are you hoping to copy the data from your removable drive to your local HDD? if so, then you should use the shutil module import shutil
sourcefile = r'E:\path\to\file\example.ext'
destinationfile = r'C:\path\to\where\File\gets\copied\copy_example.ext'
shutil.copy(sourcefile, destinationfile)
... View more
04-08-2014
01:18 PM
|
0
|
0
|
234
|
POST
|
Were the issues brought up in the root of this post ever resolved? It's 2014 now, and I seem to be having the same problem with my Python Addin extension; some events are listened to, others are ignored. closing and re-opening the extension is not a viable solution for my work because the process needs to remain more or less transparent to the end user.
... View more
04-08-2014
12:57 PM
|
0
|
0
|
331
|
POST
|
Please post the top portion of your code where you parse out the input parameters.
... View more
01-09-2014
12:10 PM
|
0
|
0
|
415
|
POST
|
I am replying to my own post... I found a work around, in case others are dealing with this same problem. for lyr in diflyrs:
... if not lyr.isBroken and lyr.name != ufc and int(str(arcpy.GetCount_management(lyr))):
... x=[]
... templyr = arcpy.MakeFeatureLayer_management(lyr.dataSource,"in_memory\\templyr")
... arcpy.SelectLayerByLocation_management(templyr,"INTERSECT",r"BG\bg_differences",'#',"NEW_SELECTION")
... for row in arcpy.SearchCursor(templyr):
... x.append(row.OBJECTID)
... arcpy.Delete_management("in_memory\\templyr")
... if x:
... print lyr.name, x Instead of working directly on the layers in my MXD I am creating a temporary, in_memory layer for each iteration and when I am done I delete it. I use the .dataSource property from the original layer as the input for the MakeFeatureLayer_management() tool. Since this is a lame work around and does nothing to address the true issue I am leaving the post unsolved. If anyone can reply explaining what I was doing wrong, or how to fix it I would still appreciated it very much. This work around would not be very helpful to anyone who is wants their selection to remain selected in the MXD \dataframe because it would result in bunches of duplicate layers in the TOC. On another note, The Script, as presented above, is to slow for my purposes. it takes an average of about 16 Seconds per layer. Since it is running against 17 layers that's almost 5 minutes to run. Way to slow to use for a simple push button AddIn tool, especially since I could probably do the work manually through point/click in about the same amount of time. Does anyone have ideas for how to speed it up?
... View more
01-09-2014
12:06 PM
|
0
|
0
|
367
|
POST
|
I am working in version 10.1. I have several layers stored in a file GDB\Feature Dataset. All layers are added to an MXD and organized into Group Layers. In ArcMap midway through a session Layers that are in the TOC no longer appear as options to input into ArcToobox tools. The layers still appear in the TOC, I can still view them in the map and view their Attribute tables. However when I try to Geoprocess them with a tool that requires a Layer for input, they "don't exist". If I close the map and re-open, then they "exist" again. The dissapperance occurs after using arcpy.SelectLayerByLocation_management() tool in the Python immediate window. Ultimately my goal is to use a Python AddIn to loop through several Layers in the current MXD Selecting by Location, reporting details about the selection, deselecting all, and then moving on to the next Layer on the list. (basically a push button option to spatially select multiple layers at once and get info about them in a summary listing). The problem (as stated before) is that after the first Layer on the list completes successfully many of the subsequent layers on the work list have 'dissappeared' from the map document and are no longer accepted as valid input to the arcpy.SelectLayerByLocation_management() tool. Restarting ArcMap in order to get my layers back is simply not an option because it would break the process and completely defeat the efficency benefits of using an AddIn. Here is some code from the python immediate window (I added some comments '#...' after the fact: >>> mxd = arcpy.mapping.MapDocument('current')
df = arcpy.mapping.ListDataFrames(mxd)[0]
diflyrs = arcpy.mapping.ListLayers(mxd,'*_differences',df)
ufc = diflyrs[1].name
>>> for lyr in diflyrs: print lyr.longName
CDP\cdp_differences
BG\bg_differences
COUSUB\ccd_differences
COUSUB\mcd_differences
PLACE\place_differences
CONCITY\concity_differences
UGA\uga_differences
ELSD\elsd_differences
SCSD\scsd_differences
UNSD\unsd_differences
SLDL\sldl_differences
SLDU\sldu_differences
CD\cd_differences
AIA\aial_differences
TBG\tbg_differences
TRIBSUB\aitsl_differences
ANRC\anrc_differences
SUBMCD\submcd_differences
#all layers in this list were found by arcpy.mapping.ListLayers(), so they were recognized as valid by arcObjects
>>> for lyr in diflyrs:
if not lyr.isBroken and lyr.name != ufc and int(str(arcpy.GetCount_management(lyr))):
x = []
arcpy.SelectLayerByLocation_management(lyr,"INTERSECT",r"BG\bg_differences",'#',"NEW_SELECTION")
for row in arcpy.SearchCursor(lyr):
x.append(row.OBJECTID)
arcpy.SelectLayerByAttribute_management(lyr,"CLEAR_SELECTION")
if x:
print lyr.name, x
ccd_differences [1, 2]
#first layer on the list runs as expected.
Runtime error Traceback (most recent call last): File "<string>", line 4, in <module> File "c:\program files (x86)\arcgis\desktop10.1\arcpy\arcpy\management.py", line 6559, in SelectLayerByLocation raise e ExecuteError: ERROR 000368: Invalid input data.
#second layer on the list fails because it is not a layer?
>>> print lyr
PLACE\place_differences
#above is the long name for the layer that failed
#by the way, if I restart the MXD and alter the diflyrs list so that PLACE\place_differences runs first, it works,
#but then the script fails when it reaches COUSUB\ccd_differences
#in case you wondered, layers CDP\cdp_differences and BG\bg_differences both get skiped by the initial if statement
After running the code above I took this screen shot attached which shows the PLACE\place_differences layer in the TOC along side an ArcToolbox tool which does not include it as a valid input. Before running the Python Script I used this exact tool to spatially select the PLACE\place_differences layer without any issue. Also even after 'breaking' the Layer I am still able to spatially select it by using the Select menu->Select by Location wizard. [ATTACH=CONFIG]30375[/ATTACH] I am posting this in the Geoprocessing section as well since applys there too.
... View more
01-09-2014
07:22 AM
|
0
|
2
|
684
|
POST
|
I am working in version 10.1. I have several layers stored in a file GDB\Feature Dataset. All layers are added to an MXD and organized into Group Layers. In ArcMap midway through a session Layers that are in the TOC no longer appear as options to input into ArcToobox tools. The layers still appear in the TOC, I can still view them in the map and view their Attribute tables. However when I try to Geoprocess them with a tool that requires a Layer for input, they "don't exist". If I close the map and re-open, then they "exist" again. The dissapperance occurs after using arcpy.SelectLayerByLocation_management() tool in the Python immediate window. Ultimately my goal is to use a Python AddIn to loop through several Layers in the current MXD Selecting by Location, reporting details about the selection, deselecting all, and then moving on to the next Layer on the list. (basically a push button option to spatially select multiple layers at once and get info about them in a summary listing). The problem (as stated before) is that after the first Layer on the list completes successfully many of the subsequent layers on the work list have 'dissappeared' from the map document and are no longer accepted as valid input to the arcpy.SelectLayerByLocation_management() tool. Restarting ArcMap in order to get my layers back is simply not an option because it would break the process and completely defeat the efficency benefits of using an AddIn. Here is some code from the python immediate window (I added some comments '#...' after the fact: >>> mxd = arcpy.mapping.MapDocument('current')
df = arcpy.mapping.ListDataFrames(mxd)[0]
diflyrs = arcpy.mapping.ListLayers(mxd,'*_differences',df)
ufc = diflyrs[1].name
>>> for lyr in diflyrs: print lyr.longName
CDP\cdp_differences
BG\bg_differences
COUSUB\ccd_differences
COUSUB\mcd_differences
PLACE\place_differences
CONCITY\concity_differences
UGA\uga_differences
ELSD\elsd_differences
SCSD\scsd_differences
UNSD\unsd_differences
SLDL\sldl_differences
SLDU\sldu_differences
CD\cd_differences
AIA\aial_differences
TBG\tbg_differences
TRIBSUB\aitsl_differences
ANRC\anrc_differences
SUBMCD\submcd_differences
#all layers in this list were found by arcpy.mapping.ListLayers(), so they were recognized as valid by arcObjects
>>> for lyr in diflyrs:
if not lyr.isBroken and lyr.name != ufc and int(str(arcpy.GetCount_management(lyr))):
x = []
arcpy.SelectLayerByLocation_management(lyr,"INTERSECT",r"BG\bg_differences",'#',"NEW_SELECTION")
for row in arcpy.SearchCursor(lyr):
x.append(row.OBJECTID)
arcpy.SelectLayerByAttribute_management(lyr,"CLEAR_SELECTION")
if x:
print lyr.name, x
ccd_differences [1, 2]
#first layer on the list runs as expected.
Runtime error Traceback (most recent call last): File "<string>", line 4, in <module> File "c:\program files (x86)\arcgis\desktop10.1\arcpy\arcpy\management.py", line 6559, in SelectLayerByLocation raise e ExecuteError: ERROR 000368: Invalid input data.
#second layer on the list fails because it is not a layer?
>>> print lyr
PLACE\place_differences
#above is the long name for the layer that failed
#by the way, if I restart the MXD and alter the diflyrs list so that PLACE\place_differences runs first, it works,
#but then the script fails when it reaches COUSUB\ccd_differences
#in case you wondered, layers CDP\cdp_differences and BG\bg_differences both get skiped by the initial if statement
After running the code above I took this screen shot attached which shows the PLACE\place_differences layer in the TOC along side an ArcToolbox tool which does not include it as a valid input. Before running the Python Script I used this exact tool to spatially select the PLACE\place_differences layer without any issue. Also even after 'breaking' the Layer I am still able to spatially select it by using the Select menu->Select by Location wizard. [ATTACH=CONFIG]30373[/ATTACH] I am posting this in the Python section as well since applys there too.
... View more
01-09-2014
07:18 AM
|
0
|
0
|
410
|
POST
|
Use a combobox to take the input. Make sure set the combobox's editable property to true. Write your code inside the OnEnter event of the combobox. The problem with this is that I want to accept a long string from the user, maybe one thousand characters. I can't expect them to enter that in a tiny combo box, and it would be especially lame to make a very large combo box that would use up valuable screen space even when it is not in use. A popup window with a text box is what I want. Not a combo box, not a stupid script tool interface. The TKinter internal loop back problem has been know about for a long time. Why not fix it already? also, wxPython is not a python standard library. At my work place I am unable to install python libraries, so I am stuck with tkinter.
... View more
12-18-2013
04:17 AM
|
0
|
0
|
1828
|
POST
|
I solved this problem by back tracking. In case other people stumble on this post while searching for their own solution here is what happened: The 'in_layer' that I was using ('in_memery\\mergedStreetsPolygons') was not actually a layer, it was an in_memory feature class. It originated from this command which I thought would output as a layer: arcpy.FeatureToPolygon_management('in_memory\\mergedStreets', 'in_memory\\mergedStreetsPolygons', "", "ATTRIBUTES", "") I tried to modify the command to force it to output as a layer and that did not work, I guess it is only able to output to Feature Class: >>> arcpy.SelectLayerByLocation_management('in_memory\\mergedStreetsPolygons', "COMPLETELY_WITHIN", 'in_memory\\mtdbStreetBuffer.lyr', "", "NEW_SELECTION") Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> arcpy.SelectLayerByLocation_management('in_memory\\mergedStreetsPolygons', "COMPLETELY_WITHIN", 'in_memory\\mtdbStreetBuffer.lyr', "", "NEW_SELECTION") File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\management.py", line 6559, in SelectLayerByLocation raise e ExecuteError: Failed to execute. Parameters are not valid. ERROR 000368: Invalid input data. ERROR 000732: Selecting Features: Dataset in_memory\mtdbStreetBuffer.lyr does not exist or is not supported Failed to execute (SelectLayerByLocation). So I just added a line to convert it to a Layer and used the new layer name for the in_layer parameter. It worked: >>> arcpy.MakeFeatureLayer_management('in_memory\\mergedStreetsPolygons', 'in_memory\\mergedStreetsPolygons.lyr') <Result 'in_memory\\mergedStreetsPolygons.lyr'> >>> arcpy.SelectLayerByLocation_management('in_memory\\mergedStreetsPolygons.lyr', "COMPLETELY_WITHIN", 'in_memory\\mtdbStreetBuffer', "", "NEW_SELECTION") <Result 'in_memory\\mergedStreetsPolygons.lyr'> Of course the on disk copies that I made (for trouble shooting) worked okay in ArcMap because when I brought them into the map it made layers of them. Just a quick reminder, if you do something like this to fix your code make sure that all future commands that referenced the old 'layer' [technically it wasn't a layer, hence the error message] get updated to use the new one...
... View more
08-15-2013
07:31 AM
|
1
|
0
|
1043
|
POST
|
A coworker of my produced a great model and asked me to convert it to Python for him. The python script is failing at the same point each time I try to use it. It is unable to run the following command: >>> arcpy.SelectLayerByLocation_management('in_memory\\mergedStreetsPolygons', "COMPLETELY_WITHIN", outputGDB + '\\mtdbStreetBuffer', "", "NEW_SELECTION") Traceback (most recent call last): File "<pyshell#15>", line 1, in <module> arcpy.SelectLayerByLocation_management('in_memory\\mergedStreetsPolygons', "COMPLETELY_WITHIN", outputGDB + '\\mtdbStreetBuffer', "", "NEW_SELECTION") File "C:\Program Files (x86)\ArcGIS\Desktop10.1\arcpy\arcpy\management.py", line 6559, in SelectLayerByLocation raise e ExecuteError: Failed to execute. Parameters are not valid. ERROR 000368: Invalid input data. Failed to execute (SelectLayerByLocation). The "COMPLETELY_WITHIN" selection method requires that the selecting feature be of 'polygon' type, so I checked that: >>> arcpy.Describe('in_memory\\mtdbStreetBuffer').shapeType u'Polygon' I saved both of the layers as Feature Classes in a File GDB. >>> arcpy.CopyFeatures_management('in_memory\\mergedStreetsPolygons', outputGDB + '\\mergedStreetsPolygon') <Result '..path\suppressed..gdb\\mergedStreetsPolygon'> >>> arcpy.CopyFeatures_management('in_memory\\mtdbStreetBuffer', outputGDB + '\\mtdbStreetBuffer') <Result '..path\suppressed..gdb\\mtdbStreetBuffer'> *I blocked off the path to the GDB because it divulges more information about our servers than I should post on the forum. I brought those features into ArcMap and used Arctoolbox to run the selection and it worked. Using the python immediate window in ArcMap also worked. So does anyone have any idea why the selection will not work 'in_memory'? Other similar lines of code within the same script are working properly, just not this one.
... View more
08-15-2013
06:57 AM
|
1
|
2
|
3658
|
POST
|
lpugh01: This is a very useful suggestion. I can ask for permission to add this module. I am assuming all end users of the end product will need to have this module as well (or I learn how to compile my script with PythonWin).
... View more
08-19-2011
11:21 AM
|
0
|
0
|
531
|
POST
|
The tool I am building will be used by 5 or 6 people in my office. It will be used intensely for about a month, and then they will not need it any more. The expectations placed on me are low. We had a programmer who did this sort of thing in ArcObjects, but he quit. We weren't able to hire a replacement, so now I am trying to make something to at least fill the gap. I know QGIS, but cannot use it at work because of constraints on what software can be installed on our workstations (hence I am using Python and Tkinter. They were already on my machine). Since I am not a 'developer' I don't get much choice in the tools available to me. If I had complete control over my computer I would consider using QGIS or ArcObjects. Thank you both for your suggestions.
... View more
08-19-2011
03:06 AM
|
0
|
0
|
531
|
POST
|
Thank you for replying StacyRandal. I was starting to get the idea that I may not have a good way to fix this, but it is good to have a second opinion first. I have tried those other refresh ideas already. When using the GUI outside of the ArcMap environment the refresh command inside of ArcMap does not register changes in view extent, and does not register changes in Selections sets. The refresh command in ArcMap does register any changes that the GUI has made to the layer, but in order to make changes (correctly) the user should be able to see what they are changing first. The refresh command in ArcCatalog does not seem to have any effect on the display in ArcMap. Opening and closing the MXD has the same effect as using the refresh command in ArcMap. Display and Selection changes are not registered, but changes to the actual stored data in the layer are registered. I suppose I could force this method to work by replacing all lines of arcpy.RefreshActiveView() with mxd.save(), where mxd is my map document. I expect this would slow down the code, and as you mentioned, it would be inconvenient to the user. The reason why I want the ArcMap screen to be enabled at the same time as the GUI script is so that users can augment the selection of polygons that are targeted for editing. The GUI is configured to handle each polygon individually, but when it makes changes they take effect on all selected items. In some (perhaps many) cases I expect the user to see places where their work would be sped up by having the ability to multi-select polygons for correction, rather than zooming to each of them individually. This is not accomplished by using the open/close/reopen method of refresh. At this point I think it is probably best if I accept it, and if it really bothers me, then i should learn to program full fledged extension using arc objects.
... View more
08-18-2011
03:20 AM
|
0
|
0
|
531
|
POST
|
I thought I saw the problem, but the problem was actually with my eyes. I just edited my post to avoid publishing mis-information.
... View more
08-17-2011
12:10 PM
|
0
|
0
|
8453
|
POST
|
You may need to use the function arcpy.CheckOutExtension("Spatial") in order for arcpy to realize that you have the spatial analyst extension. If this works, then you will want to use the CheckInExtension() function when you are done in order to let go of the license. Details and an example are provided at: http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/CheckOutExtension/000v0000003q000000/
... View more
08-17-2011
12:04 PM
|
0
|
0
|
392
|
POST
|
Then it is not as simple as I suggested earlier. Is the code very long, could you post it, or part of it?
... View more
08-17-2011
11:55 AM
|
0
|
0
|
8453
|
Title | Kudos | Posted |
---|---|---|
1 | 08-15-2013 06:57 AM | |
1 | 08-15-2013 07:31 AM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:23 AM
|