#!/usr/bin/python # -*- coding: utf-8 -*- import os from logzero import logger from zipfile import ZipFile import geopandas as gp overall=[] def vcount(shpfile): df = gp.read_file(shpfile) if not df.size==0: for i, row in df.iterrows(): # It's better to check if multigeometry multi = row.geometry.type.startswith("Multi") if multi: n = 0 # iterate over all parts of multigeometry for part in row.geometry: n += len(part.exterior.coords) else: # if single geometry like point, linestring or polygon n = len(row.geometry.exterior.coords) #print('Total vertices: {:,}'.format(n)) overall.append(n) if all(i < 1000000 for i in overall)==True: return sum(overall) else: logger.warning(shpfile+' has overall max vertex of '+str(max(overall))+' with max allowed 1000000 ingest might fail') return sum(overall) #print('Total vertices per feature exceeded max. Overall vertices: {}'.format(sum(overall))) #return sum(overall) else: return df.size ex = ['.shp', '.prj', '.dbf', '.shx'] file_paths = [] i=1 def zipshape(directory,export): for (root, directories, files) in os.walk(directory): for filename in files: if filename.endswith('.shp'): #print(os.path.join(directory,filename)) #print(vcount(os.path.join(directory,filename))) if vcount(os.path.join(directory,filename))>0: file_paths=[] filebase = filename.split('.')[0] try: for things in ex: if os.path.exists(os.path.join(root, filebase+things)): filepath = os.path.join(root, filebase+things) #print(filepath) file_paths.append(filepath) os.chdir(export) if not os.path.exists(filebase+'.zip') and int(len(file_paths))==int(4): with ZipFile(filebase+'.zip','w') as zip: print("Creating zipped folder "+str(filebase)+'.zip'+' at '+str(export)) # writing each file one by one for file in file_paths: fname=os.path.basename(file) zip.write(file,fname) else: print('File already exists: '+str(filebase+'.zip')+' SKIPPING') except: pass #get_all_file_paths(directory=r"C:\Users\samapriya\Downloads\nexgengrid",export=r'D:\Library')