Aqui estão algumas modificações que devem fazer a coisa funcionar. Observe que ele precisaria de mais modificações se você precisar ser notificado se algum dos comandos falhar. Observe que ele falhará para mais de um shapefile, pois um
new_shp_table
table já existirá até que você tenha mais lógica para mover ou renomear essa tabela em outro lugar ou carregá-la com um nome exclusivo. Além disso, observe que o PostgreSQL 8.4 chegará ao fim de sua vida útil ainda este ano, portanto, você pode planejar atualizar para uma versão mais recente antes que seja tarde demais.
import os, subprocess
# Choose your PostgreSQL version here
os.environ['PATH'] += r';C:\Program Files (x86)\PostgreSQL\8.4\bin'
# http://www.postgresql.org/docs/current/static/libpq-envars.html
os.environ['PGHOST'] = 'localhost'
os.environ['PGPORT'] = '5432'
os.environ['PGUSER'] = 'someuser'
os.environ['PGPASSWORD'] = 'clever password'
os.environ['PGDATABASE'] = 'geometry_database'
base_dir = r"c:\shape_file_repository"
full_dir = os.walk(base_dir)
shapefile_list = []
for source, dirs, files in full_dir:
for file_ in files:
if file_[-3:] == 'shp':
shapefile_path = os.path.join(base_dir, file_)
shapefile_list.append(shapefile_path)
for shape_path in shapefile_list:
cmds = 'shp2pgsql "' + shape_path + '" new_shp_table | psql '
subprocess.call(cmds, shell=True)