python3 с помощью smart_open.s3_iter_bucket - невозможно открыть мои файлы .shp и .dbf - PullRequest
0 голосов
/ 11 января 2020

Мой скрипт проверен на моем локальном диске и работает просто отлично. Однако, когда я реализую код для итерации с моим S3, я получаю исключение ShapefileException.

import boto3
from smart_open import open
from smart_open import s3_iter_bucket
import shapefile
from shapely.geometry import Point, Polygon


def search(event, context):
    dep = (40.7128, 74.0060) #coordinate of point 1 

bucket = "bucket_name"

for key, content in s3_iter_bucket(bucket, workers=1):
    polygon = shapefile.Reader(key)
    polygons = polygon.shapes()
    # records = polygon.records()
    for shape in polygons:
        shpfilepoints = []
        shpfilepoints = shape.points
        polygon = shpfilepoints
        poly = Polygon(polygon)

        if p1.within(poly):
            print(
                'inside')
        else:
            print(
                'out')

Мой код (вдохновленный битами, найденными в Geo-стеке и Git) выполняет поиск, если точка находится в или из многоугольника. Для этого я нашел все 5 файлов, необходимых для получения Shapefile на моем S3, я проверил код на моем диске с теми же файлами, и что касается моего диска, я получил ответ «out», но для попытки итерации s3 я получить следующий журнал ошибок:

Frederics-MacBook-Pro:v-env frederic$ python-lambda-local -l lib/ -f search -t 500 

IdAircraft.py event.json
[root - INFO - 2020-01-11 09:33:28,560] Event: {'Dep': '(40.7128, 74.0060)', 'Arr': '(48.8566, 2.3522)'}
[root - INFO - 2020-01-11 09:33:28,560] START RequestId: 0d7ee373-ea4a-4df1-8d33-f3353ce05649 Version: 
[smart_open.s3 - INFO - 2020-01-11 09:33:28,890] creating pool with 1 workers
[botocore.credentials - INFO - 2020-01-11 09:33:28,916] Found credentials in shared credentials file: ~/.aws/credentials
[botocore.credentials - INFO - 2020-01-11 09:33:29,341] Found credentials in shared credentials file: ~/.aws/credentials
[smart_open.s3 - INFO - 2020-01-11 09:33:29,620] yielding key #0: Ops_polygon_FA7X_N777XV.dbf, size 78 (total 0.0MB)
[botocore.credentials - INFO - 2020-01-11 09:33:29,646] Found credentials in shared credentials file: ~/.aws/credentials
[root - INFO - 2020-01-11 09:33:29,724] END RequestId: 0d7ee373-ea4a-4df1-8d33-f3353ce05649
[root - INFO - 2020-01-11 09:33:29,724] REPORT RequestId: 0d7ee373-ea4a-4df1-8d33-f3353ce05649  Duration: 737.57 ms
[root - INFO - 2020-01-11 09:33:29,725] RESULT:
{
    "errorMessage": "Unable to open Ops_polygon_FA7X_N777XV.dbf or Ops_polygon_FA7X_N777XV.shp.",
    "stackTrace": [
        "  File \"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/lambda_local/main.py\", line 153, in execute\n    result = func(event, context._activate())\n",
        "  File \"IdAircraft.py\", line 19, in search\n    polygon = shapefile.Reader(key, content)\n",
        "  File \"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/shapefile.py\", line 553, in __init__\n    self.load(args[0])\n",
        "  File \"/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/shapefile.py\", line 646, in load\n    raise ShapefileException(\"Unable to open %s.dbf or %s.shp.\" % (shapeName, shapeName))\n"
    ],
    "errorType": "ShapefileException"
}

В обеих попытках я использую python -lambda-local для запуска кода и имитации aws -lambda. Кто-нибудь сталкивался бы с подобной проблемой?

...