Berikut adalah beberapa modifikasi yang seharusnya membuat sesuatu bekerja. Perhatikan bahwa itu akan membutuhkan modifikasi lebih lanjut jika Anda perlu diberi tahu jika ada perintah yang gagal. Perhatikan bahwa itu akan gagal untuk lebih dari satu shapefile, karena new_shp_table
tabel akan ada sampai Anda memiliki logika lebih lanjut untuk memindahkan atau mengganti nama tabel itu di tempat lain, atau memuatnya dengan nama yang unik.
Perhatikan juga bahwa PostgreSQL 8.4 akan mencapai akhir masa pakainya akhir tahun ini, jadi Anda mungkin ingin merencanakan untuk meningkatkan ke rilis yang lebih baru sebelum terlambat.
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)