Как исправить / удалить ненужную новую строку "\ n" в динамически создаваемом файле geoJson (Python) - PullRequest
0 голосов
/ 01 ноября 2019

Я настраиваю файл geoJson динамически, принимая координаты pologon и создавая результирующий файл geoJson, который я затем добавляю в «основной» файл geoJson или читаю его непосредственно на карте.

Я былвозможность генерировать файл geoJson, но он печатает в неправильном формате. Что мне нужно сделать, чтобы получить правильный формат вывода?

Я пытался использовать: filecontent = [line.rstrip () для строки в недавнем файле]

Для устранения "\ n"символов, но он по-прежнему выводит в файл нечетные символы.

У меня есть эти неформатированные выходные данные (Начало) Это новая строка до и после каждого значения в каждой строке

{
    "type": "FeatureCollection",
    "features": [
        "{\n    \"type\": \"Feature\",\n    \"geometry\": {\n        \"type\": \"Polygon\",\n        \"coordinates\": [\n            [\n                [\n                    -96.00362,\n                    30.09309,\n                    0.0\n                ],\n                [\n                    -96.00095,\n                    30.09731,\n                    0.0\n                ],\n                [\n                    -95.99735,\n                    30.09713,\n                    0.0\n                ],\n                [\n                    -95.99848,\n                    30.09348,\n                    0.0\n                ],\n                [\n                    -96.00362,\n                    30.09309,\n                    0.0\n                ]\n            ]\n        ]\n    },\n    \"properties\": {\n        \"name\": \"Pasture 7\",\n        \"styleUrl\": \"#poly-4F2682-3000-128\",\n        \"styleHash\": \"-50cd947a\",\n        \"styleMapHash\": {\n            \"normal\": \"#poly-4F2682-3000-128-normal\",\n            \"highlight\": \"#poly-4F2682-3000-128-highlight\"\n        },\n        \"description\": \"Future site for\\u00a0\\u201cComprehensive Hi-Tech Agricultural Complex\\u201d\",\n        \"stroke\": \"#4f2682\",\n        \"stroke-opacity\": 1,\n        \"stroke-width\": 3,\n        \"fill\": \"#4f2682\",\n        \"fill-opacity\": 0.5019607843137255\n    }\n}{\n    \"type\": \"Feature\",\n    \"geometry\": {\n        \"type\": \"Polygon\",\n        \"coordinates\": [\n            [\n                [\n                    -96.02551,\n                    30.09428,\n                    0.0\n                ],\n                [\n                    -96.02524,\n                    30.09953,\n                    0.0\n                ],\n                [\n                    -96.0188,\n                    30.09913,\n                    0.0\n                ],\n                [\n                    -96.01874,\n                    30.0937,\n                    0.0\n                ],\n                [\n                    -96.02551,\n                    30.09428,\n                    0.0\n                ]\n            ]\n        ]\n    },\n    \"properties\": {\n        \"name\": \"Pasture 7\",\n        \"styleUrl\": \"#poly-4F2682-3000-128\",\n        \"styleHash\": \"-50cd947a\",\n        \"styleMapHash\": {\n            \"normal\": \"#poly-4F2682-3000-128-normal\",\n            \"highlight\": \"#poly-4F2682-3000-128-highlight\"\n        },\n        \"description\": \"Future site for\\u00a0\\u201cComprehensive Hi-Tech Agricultural Complex\\u201d\",\n        \"stroke\": \"#4f2682\",\n        \"stroke-opacity\": 1,\n        \"stroke-width\": 3,\n        \"fill\": \"#4f2682\",\n        \"fill-opacity\": 0.5019607843137255\n    }\n}\n"
    ]
}

Конец неверного формата вывода

Вот мой код для чтения файлов geoJson и добавления новой переменной перед записью в файл.

import os
import json
from pathlib import Path
import shutil

files = [os.path.join(sourceoffiles, x) for x in 
os.listdir(destinationfiles) if x.endswith(".json")]
newest = max(files , key = os.path.getctime)

recentfile = open(newest)
recentfilecontent = recentfile.read()
#print(recentfilecontent)

geojson_file = {
"type": "FeatureCollection",
"features": [

]
};
geojson_file['features'].append(recentfilecontent)

with open("newarea.js" , "w") as newarea:
    json.dump(geojson_file, newarea, indent=4)

Это мой ожидаемый результат:

{
"type": "FeatureCollection",
"features": [
{
   "type": "Feature",
   "geometry": {
       "type": "Polygon",
       "coordinates": [
           [
               [
                   -95.97203,
                   30.094557,
                   0
               ],
               [
                   -95.970563,
                   30.094285,
                   0
               ],
               [
                   -95.969004,
                   30.094035,
                   0
               ],
               [
                   -95.967678,
                   30.093836,
                   0
               ],
               [
                   -95.967681,
                   30.095099,
                   0
               ],
               [
                   -95.967687,
                   30.096482,
                   0
               ],
               [
                   -95.967699,
                   30.097665,
                   0
               ],
               [
                   -95.970578,
                   30.097908,
                   0
               ],
               [
                  -95.97203,
                  30.094557,
                  0
               ]
           ]
       ]
   },
   "properties": {
       "name": "Area 1",
       "styleUrl": "#poly-FF0004-3000-128-nodesc",
       "styleHash": "-188cd7bd",
       "styleMapHash": {
           "normal": "#poly-FF0004-3000-128-nodesc-normal",
           "highlight": "#poly-FF0004-3000-128-nodesc-highlight"
       },
       "stroke": "#ff0004",
       "stroke-opacity": 1,
       "stroke-width": 3,
       "fill": "#ff0004",
       "fill-opacity": 0.5019607843137255
   }
},
{
   "type": "Feature",
   "geometry": {
       "type": "Polygon",
       "coordinates": [
           [
               [
                   -95.979281,
                   30.0946,
                   0
               ],
               [
                   -95.979115,
                   30.095331,
                   0
               ],
               [
                   -95.980096,
                   30.095487,
                   0
               ],
               [
                   -95.980258,
                   30.094751,
                   0
               ],
               [
                   -95.979281,
                   30.0946,
                   0
               ]
           ]
       ]
   },
   "properties": {
       "name": "Area 2",
       "styleUrl": "#poly-0000FF-3000-128-nodesc",
       "styleHash": "-6fb6f6b9",
       "styleMapHash": {
           "normal": "#poly-0000FF-3000-128-nodesc-normal",
           "highlight": "#poly-0000FF-3000-128-nodesc-highlight"
       },
       "stroke": "#0000ff",
       "stroke-opacity": 1,
       "stroke-width": 3,
       "fill": "#0000ff",
       "fill-opacity": 0.5019607843137255
   }
}
]
};

1 Ответ

0 голосов
/ 01 ноября 2019

Файл, который вы читаете, содержит данные в кодировке json, которые python видит в виде строки. Когда вы записываете это в массив geojson_file s features, вы пишете строку. Вам нужно проанализировать json перед загрузкой результирующего dict в geojson_file:

geojson_file['features'].append(json.loads(recentfilecontent))

Представления новой строки исчезают, являясь частью (бессмысленного) пустого пространства json внутри того, что в настоящее время представлено как jsonзакодированная строка, содержащая перевод строки.

...