Hier sind einige Modifikationen, die das Ding zum Laufen bringen sollten. Beachten Sie, dass weitere Änderungen erforderlich sind, wenn Sie benachrichtigt werden müssen, wenn einer der Befehle fehlschlägt. Beachten Sie, dass dies bei mehr als einem Shapefile fehlschlagen wird, da eine new_shp_table
Tabelle existiert bereits, bis Sie weitere Logik haben, um diese Tabelle an eine andere Stelle zu verschieben oder umzubenennen oder sie mit einem eindeutigen Namen zu laden.
Beachten Sie außerdem, dass PostgreSQL 8.4 später in diesem Jahr das Ende seiner Lebensdauer erreichen wird, sodass Sie vielleicht ein Upgrade auf eine neuere Version planen sollten, bevor es zu spät ist.
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)