从列表中删除引号-Python

问题描述 投票:0回答:1

我有以下字符串,其中包含不同poligons的坐标[x,y],[x,y]...

test3 = [(39.414604,-7.021836),(39.814045,-4.073939),(41.315235,-4.384754),(40.917038,-7.398971),(39.414604,-7.021836)],[(38.844185,-4.804621),(39.241299,-1.899833),(40.74308,-2.205491),(40.34742,-5.17429),(38.844185,-4.804621)],[(40.347511,-5.174313),(40.743309,-2.20434),(42.242691,-2.530139),(41.847603,-5.569263),(40.347511,-5.174313)],[(39.365192,-1.941078),(40.867912,-1.567062),(41.276688,-4.670904),(39.775406,-4.976737),(39.365192,-1.941078)],[(39.706161,-1.849863),(41.207623,-1.465817),(41.617561,-4.594476),(40.117233,-4.908839),(39.706161,-1.849863)],[(39.702591,-5.033657),(40.101254,-2.077048),(41.602196,-2.389729),(41.204681,-5.413605),(39.702591,-5.033657)],[(40.502308,-3.713448),(42.002708,-3.320609),(42.411217,-6.481188),(40.911678,-6.801756),(40.502308,-3.713448)],[(38.999126,-4.084739),(40.50222,-3.713471),(40.911449,-6.800602),(39.409878,-7.104931),(38.999126,-4.084739)],[(39.706161,-1.849863),(41.207623,-1.465817),(41.617561,-4.594476),(40.117233,-4.908839),(39.706161,-1.849863)]

[检查test3的输出时,它附带'和'' at the begining and end (this can be avoided by using print(test3)`

> test3
'[(39.414604,-7.021836),(39.814045,-4.073939),(41.315235,-4.384754),(40.917038,-7.398971),(39.414604,-7.021836)],[(38.844185,-4.804621),(39.241299,-1.899833),(40.74308,-2.205491),(40.34742,-5.17429),(38.844185,-4.804621)],[(40.347511,-5.174313),(40.743309,-2.20434),(42.242691,-2.530139),(41.847603,-5.569263),(40.347511,-5.174313)],[(39.365192,-1.941078),(40.867912,-1.567062),(41.276688,-4.670904),(39.775406,-4.976737),(39.365192,-1.941078)],[(39.706161,-1.849863),(41.207623,-1.465817),(41.617561,-4.594476),(40.117233,-4.908839),(39.706161,-1.849863)],[(39.702591,-5.033657),(40.101254,-2.077048),(41.602196,-2.389729),(41.204681,-5.413605),(39.702591,-5.033657)],[(40.502308,-3.713448),(42.002708,-3.320609),(42.411217,-6.481188),(40.911678,-6.801756),(40.502308,-3.713448)],[(38.999126,-4.084739),(40.50222,-3.713471),(40.911449,-6.800602),(39.409878,-7.104931),(38.999126,-4.084739)],[(39.706161,-1.849863),(41.207623,-1.465817),(41.617561,-4.594476),(40.117233,-4.908839),(39.706161,-1.849863)]'

我想使用此字符串作为坐标信息来绘制交互式地图中的多边形。为此,我使用以下代码,特别是需要locations输入的list参数

from ipyleaflet import Map, Polygon

polygon = Polygon(
    locations=[test3],
    color="green",
    fill_opacity= 0.5,
    fill_color="green"
)

m = Map(center=(38.5531, -4.6914), zoom=6)
m.add_layer(polygon);
m

问题是[test3]等于:(请注意开头的['[和结尾的]']

['[(39.414604,-7.021836),(39.814045,-4.073939),(41.315235,-4.384754),(40.917038,-7.398971),(39.414604,-7.021836)],[(38.844185,-4.804621),(39.241299,-1.899833),(40.74308,-2.205491),(40.34742,-5.17429),(38.844185,-4.804621)],[(40.347511,-5.174313),(40.743309,-2.20434),(42.242691,-2.530139),(41.847603,-5.569263),(40.347511,-5.174313)],[(39.365192,-1.941078),(40.867912,-1.567062),(41.276688,-4.670904),(39.775406,-4.976737),(39.365192,-1.941078)],[(39.706161,-1.849863),(41.207623,-1.465817),(41.617561,-4.594476),(40.117233,-4.908839),(39.706161,-1.849863)],[(39.702591,-5.033657),(40.101254,-2.077048),(41.602196,-2.389729),(41.204681,-5.413605),(39.702591,-5.033657)],[(40.502308,-3.713448),(42.002708,-3.320609),(42.411217,-6.481188),(40.911678,-6.801756),(40.502308,-3.713448)],[(38.999126,-4.084739),(40.50222,-3.713471),(40.911449,-6.800602),(39.409878,-7.104931),(38.999126,-4.084739)],[(39.706161,-1.849863),(41.207623,-1.465817),(41.617561,-4.594476),(40.117233,-4.908839),(39.706161,-1.849863)]']

我的问题是:如何在'的开头和结尾处删除test3,以便在执行[test3]时正确地输入-as [[x,y],[x,y],...,[x,y]]

-编辑-test3即将到来?

dataframe开头:

df['Footprint']
0    MULTIPOLYGON (((-6.854965 38.740932,-3.940099 ...
1    MULTIPOLYGON (((-7.021836 39.414604,-4.073939 ...
2    MULTIPOLYGON (((-4.804621 38.844185,-1.899833 ...
3    MULTIPOLYGON (((-5.174313 40.347511,-2.20434 4...
4    MULTIPOLYGON (((-1.941078 39.365192,-1.567062 ...
5    MULTIPOLYGON (((-1.849863 39.706161,-1.465817 ...
6    MULTIPOLYGON (((-5.033657 39.702591,-2.077048 ...
7    MULTIPOLYGON (((-3.713448 40.502308,-3.320609 ...
8    MULTIPOLYGON (((-4.084739 38.999126,-3.713471 ...
9    MULTIPOLYGON (((-3.870231 39.827106,-3.49322 4...
Name: Footprint, dtype: object

接下来,我将坐标的顺序从(x,y)转换为(y,x)

test2 =  df['Footprint'].map(lambda polygon: shapely.ops.transform(lambda x, y: (y, x), shapely.wkt.loads(polygon)))
test2

0    (POLYGON ((38.740932 -6.854965, 39.140369 -3.9...
1    (POLYGON ((39.414604 -7.021836, 39.814045 -4.0...
2    (POLYGON ((38.844185 -4.804621, 39.241299 -1.8...
3    (POLYGON ((40.347511 -5.174313, 40.743309 -2.2...
4    (POLYGON ((39.365192 -1.941078, 40.867912 -1.5...
5    (POLYGON ((39.706161 -1.849863, 41.207623 -1.4...
6    (POLYGON ((39.702591 -5.033657, 40.101254 -2.0...
7    (POLYGON ((40.502308 -3.713448, 42.002708 -3.3...
8    (POLYGON ((38.999126 -4.084739, 40.50222 -3.71...
9    (POLYGON ((39.827106 -3.870231, 41.329609 -3.4...
Name: Footprint, dtype: object

接下来,我创建一个包含坐标的字符串列表:

geom_str = []
for i in test2:  # same for multipolygon.geoms
    test = str(i)
    geom_str.append(test)
geom_str

['MULTIPOLYGON (((38.740932 -6.854965, 39.140369 -3.940099, 40.6422 -4.245644, 40.244202 -7.224669, 38.740932 -6.854965)))',
 'MULTIPOLYGON (((39.414604 -7.021836, 39.814045 -4.073939, 41.315235 -4.384754, 40.917038 -7.398971, 39.414604 -7.021836)))',
 'MULTIPOLYGON (((38.844185 -4.804621, 39.241299 -1.899833, 40.74308 -2.205491, 40.34742 -5.17429, 38.844185 -4.804621)))',
 'MULTIPOLYGON (((40.347511 -5.174313, 40.743309 -2.20434, 42.242691 -2.530139, 41.847603 -5.569263, 40.347511 -5.174313)))',
 'MULTIPOLYGON (((39.365192 -1.941078, 40.867912 -1.567062, 41.276688 -4.670904, 39.775406 -4.976737, 39.365192 -1.941078)))',
 'MULTIPOLYGON (((39.706161 -1.849863, 41.207623 -1.465817, 41.617561 -4.594476, 40.117233 -4.908839, 39.706161 -1.849863)))',
 'MULTIPOLYGON (((39.702591 -5.033657, 40.101254 -2.077048, 41.602196 -2.389729, 41.204681 -5.413605, 39.702591 -5.033657)))',
 'MULTIPOLYGON (((40.502308 -3.713448, 42.002708 -3.320609, 42.411217 -6.481188, 40.911678 -6.801756, 40.502308 -3.713448)))',
 'MULTIPOLYGON (((38.999126 -4.084739, 40.50222 -3.713471, 40.911449 -6.800602, 39.409878 -7.104931, 38.999126 -4.084739)))',
 'MULTIPOLYGON (((39.827106 -3.870231, 41.329609 -3.49322, 41.739006 -6.624273, 40.237854 -6.931492, 39.827106 -3.870231)))']

接下来,我删除一些不必要的字符:

extent = []

for i in range(len(geom_str)):
    test = geom_str[i]
    test = test.replace('MULTIPOLYGON (((', '(')
    test = test.replace(')))', ')')
    test = test.replace(', ', ')')
    test = test.replace(')', '),(')
    test = test.replace(' ', ',')
    test = str(test)[:-2]
    extent.append(test)

extent
['(38.740932,-6.854965),(39.140369,-3.940099),(40.6422,-4.245644),(40.244202,-7.224669),(38.740932,-6.854965)',
 '(39.414604,-7.021836),(39.814045,-4.073939),(41.315235,-4.384754),(40.917038,-7.398971),(39.414604,-7.021836)',
 '(38.844185,-4.804621),(39.241299,-1.899833),(40.74308,-2.205491),(40.34742,-5.17429),(38.844185,-4.804621)',
 '(40.347511,-5.174313),(40.743309,-2.20434),(42.242691,-2.530139),(41.847603,-5.569263),(40.347511,-5.174313)',
 '(39.365192,-1.941078),(40.867912,-1.567062),(41.276688,-4.670904),(39.775406,-4.976737),(39.365192,-1.941078)',
 '(39.706161,-1.849863),(41.207623,-1.465817),(41.617561,-4.594476),(40.117233,-4.908839),(39.706161,-1.849863)',
 '(39.702591,-5.033657),(40.101254,-2.077048),(41.602196,-2.389729),(41.204681,-5.413605),(39.702591,-5.033657)',
 '(40.502308,-3.713448),(42.002708,-3.320609),(42.411217,-6.481188),(40.911678,-6.801756),(40.502308,-3.713448)',
 '(38.999126,-4.084739),(40.50222,-3.713471),(40.911449,-6.800602),(39.409878,-7.104931),(38.999126,-4.084739)',
 '(39.827106,-3.870231),(41.329609,-3.49322),(41.739006,-6.624273),(40.237854,-6.931492),(39.827106,-3.870231)']

接下来,我在每个(x,y)坐标的开头添加[]

extent2 = []

for i in range(len(extent)):
    test = '[' + extent[i] + '],'
    extent2.append(test)

接下来,我在最后删除一些不必要的字符:

extent2[len(extent2)-1] = str(extent2[5])[:-1]

接下来,我将所有索引连接在一起(此步骤我希望将其转换为A for LOOP)

test = [extent2[1]+extent2[2]+extent2[3]+extent2[4]+extent2[5]+extent2[6]+extent2[7]+extent2[8]+extent2[9]]

最后,我最终得到如下的test3

test3 = str(test).replace("['[", '[')
test3 = str(test3).replace("]']", ']')
test3
python list
1个回答
0
投票

这是API响应数据或JSON的序列化数据。

尝试以下解决方案解决您的问题。

import json

json.loads(<pass your data over here>)

它将把您的数据转换成实际的列表或任何字典对象。

© www.soinside.com 2019 - 2024. All rights reserved.