I had a similiar issue but different workflow.....
I get Shapefiles within Zip containers so I use a slightly different technique....
How to know the folder size in a zipfile (Python) - Stack Overflow
Ted
Henry Colgate and Marc,
Jumping on the ride here, for the last few weeks Ive been messing around with this script to get this correct function and Im getting some layer files being mapped whilst others not.
What want to do:
a) Map out the layers files that are in use in a mxd (shps should be dealt with with the glob, but doesnt include tiffs)
b) Get the size of the collection of shps (i.e. test.shp consists of test.dbf, test.proj etc and I want to get the size of this bunch) - problem
c) Total size calculator of how much data is in the mxd - cant figure best way of doing this as b is blocking me
I found a really nice library called humanize to help the size conversion.
<SPAN class="keyword token">import</SPAN> arcpy<SPAN class="punctuation token">,</SPAN> os<SPAN class="punctuation token">,</SPAN> humanize<SPAN class="punctuation token">,</SPAN> glob <SPAN class="keyword token">def</SPAN> <SPAN class="token function">write_log</SPAN><SPAN class="punctuation token">(</SPAN>text<SPAN class="punctuation token">,</SPAN>file<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> f <SPAN class="operator token">=</SPAN> open<SPAN class="punctuation token">(</SPAN>file<SPAN class="punctuation token">,</SPAN><SPAN class="string token">'a'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token">#a appends to an existing file if it exists</SPAN> f<SPAN class="punctuation token">.</SPAN>write<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"{}\n"</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>text<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="comment token">#write the text to the logfile and move to the next line</SPAN> <SPAN class="keyword token">return</SPAN> output <SPAN class="operator token">=</SPAN> r<SPAN class="string token">'X:\ds\sizemxd.txt'</SPAN> <SPAN class="comment token">#directory of the log file</SPAN> mxd <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>MapDocument<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"CURRENT"</SPAN><SPAN class="punctuation token">)</SPAN> df <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>ListDataFrames<SPAN class="punctuation token">(</SPAN>mxd<SPAN class="punctuation token">)</SPAN> write_log<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"This report summarizes the names of all map documents and data frames within "</SPAN> <SPAN class="operator token">+</SPAN> mxd<SPAN class="punctuation token">.</SPAN>filePath <SPAN class="operator token">+</SPAN> <SPAN class="string token">"\n"</SPAN><SPAN class="punctuation token">,</SPAN>output<SPAN class="punctuation token">)</SPAN> write_log<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Date: "</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>datetime<SPAN class="punctuation token">.</SPAN>datetime<SPAN class="punctuation token">.</SPAN>today<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>strftime<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"%d %B, %Y"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">"\n"</SPAN><SPAN class="punctuation token">,</SPAN>output<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> d <SPAN class="keyword token">in</SPAN> df<SPAN class="punctuation token">:</SPAN> write_log<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"Data Frame: "</SPAN> <SPAN class="operator token">+</SPAN> d<SPAN class="punctuation token">.</SPAN>name<SPAN class="punctuation token">,</SPAN> output<SPAN class="punctuation token">)</SPAN> layers <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>mapping<SPAN class="punctuation token">.</SPAN>ListLayers<SPAN class="punctuation token">(</SPAN>mxd<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> d<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">for</SPAN> lyr <SPAN class="keyword token">in</SPAN> layers<SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">try</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">if</SPAN> lyr<SPAN class="punctuation token">.</SPAN>supports<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"dataSource"</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> lname <SPAN class="operator token">=</SPAN> lyr<SPAN class="punctuation token">.</SPAN>name <SPAN class="keyword token">print</SPAN> <SPAN class="string token">"lname: "</SPAN> <SPAN class="operator token">+</SPAN> lname datasource <SPAN class="operator token">=</SPAN> lyr<SPAN class="punctuation token">.</SPAN>dataSource wspath <SPAN class="operator token">=</SPAN> lyr<SPAN class="punctuation token">.</SPAN>workspacePath <SPAN class="keyword token">if</SPAN> datasource<SPAN class="punctuation token">.</SPAN>endswith<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'.shp'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> stringwspath <SPAN class="operator token">=</SPAN> str<SPAN class="punctuation token">(</SPAN>wspath<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\\"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'/'</SPAN><SPAN class="punctuation token">)</SPAN> path <SPAN class="operator token">=</SPAN> stringwspath <SPAN class="operator token">+</SPAN> <SPAN class="string token">"/"</SPAN> <SPAN class="keyword token">print</SPAN> <SPAN class="string token">"Path: "</SPAN> <SPAN class="operator token">+</SPAN> path <SPAN class="keyword token">for</SPAN> shp <SPAN class="keyword token">in</SPAN> glob<SPAN class="punctuation token">.</SPAN>glob<SPAN class="punctuation token">(</SPAN>os<SPAN class="punctuation token">.</SPAN>path<SPAN class="punctuation token">.</SPAN>join<SPAN class="punctuation token">(</SPAN>path<SPAN class="punctuation token">,</SPAN><SPAN class="string token">'{0}.*'</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>format<SPAN class="punctuation token">(</SPAN>lname<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN> shp <SPAN class="operator token">=</SPAN> str<SPAN class="punctuation token">(</SPAN>shp<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>replace<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\\"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">'/'</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">print</SPAN> <SPAN class="string token">"stripped "</SPAN> <SPAN class="operator token">+</SPAN> stripshp <SPAN class="keyword token">try</SPAN><SPAN class="punctuation token">:</SPAN> size <SPAN class="operator token">=</SPAN> os<SPAN class="punctuation token">.</SPAN>stat<SPAN class="punctuation token">(</SPAN>shp<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">.</SPAN>st_size <SPAN class="keyword token">print</SPAN> <SPAN class="string token">"size of shp "</SPAN> <SPAN class="operator token">+</SPAN> stripshp <SPAN class="operator token">+</SPAN> <SPAN class="string token">" is "</SPAN> <SPAN class="operator token">+</SPAN> humanize<SPAN class="punctuation token">.</SPAN>naturalsize<SPAN class="punctuation token">(</SPAN>size<SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">except</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">print</SPAN> <SPAN class="string token">"unable to access size of "</SPAN> <SPAN class="operator token">+</SPAN> shp <SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">pass</SPAN> <SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">pass</SPAN> <SPAN class="comment token">#print "File size: " + humanize.size</SPAN> <SPAN class="keyword token">except</SPAN><SPAN class="punctuation token">:</SPAN> <SPAN class="keyword token">print</SPAN> <SPAN class="string token">"Unable to analyse size for "</SPAN> <SPAN class="operator token">+</SPAN> lname<SPAN class="punctuation token">.</SPAN>encode<SPAN class="punctuation token">(</SPAN><SPAN class="string token">'utf-8'</SPAN><SPAN class="punctuation token">)</SPAN>
The output is:
so for the last two files PBT_FieldObservationPoints_24072017 and PBT_FieldDescriptions_24072017, I can see in the folder that there do exist shp files but for some reason it doesnt register them to get their size checked.
Would anyone be able to help with this?
Thanks in advance
for shp in arcpy.ListFeatureClasses(): total_size = sum([os.path.getsize(x) for x in glob.glob(os.path.join(path, shp[:-4]) + '*')])
for shp in arcpy.ListFeatureClasses(): mask = os.path.join(path, shp[:-4]) + '*' total_size = sum([os.path.getsize(x) for x in glob.glob(mask)])
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.