gpt4 book ai didi

python - 在 BeautifulSoup 和 Python 中使用 SVG 路径

转载 作者:行者123 更新时间:2023-11-28 16:40:39 27 4
gpt4 key购买 nike

我正在编写一个 Python 脚本,该脚本将在 SVG 格式的 map 上根据各自的家庭收入中位数为我所在城市的人口普查区 block 组(共有 18 个)的不同区域涂上不同的颜色。

听起来很简单,对吧?好吧,虽然我取得了微小的进展,但我不知道怎么做。到目前为止,我所尝试的是根据 SVG 引用它们的方式列出每个 block 组路径,列出家庭收入中位数,然后传入为它们着色的代码。然而,这只是.. 似乎没有工作,无论出于何种原因。你们中的任何一个好人都可以帮助找出我失误的地方吗?

import csv
from bs4 import BeautifulSoup

icbg = []
reader = csv.reader(open('censusdata.csv'),delimiter=",")

#read and get income
for row in reader:
income = row[6]
income = int(income)
icbg.append(income)

svg = open('NM2.svg','r')
soup = BeautifulSoup(svg,"lxml")

#find CBGs and incomes
path1 = soup.find('path')
path2 = path1.find_next('path')
path3 = path2.find_next('path')
path4 = path3.find_next('path')
path5 = path4.find_next('path')
path6 = path5.find_next('path')
path7 = path6.find_next('path')
path8 = path7.find_next('path')
path9 = path8.find_next('path')
path10 = path9.find_next('path')
path11 = path10.find_next('path')
path12 = path11.find_next('path')
path13 = path12.find_next('path')
path14 = path13.find_next('path')
path15 = path14.find_next('path')
path16 = path15.find_next('path')
path17 = path16.find_next('path')
path18 = path17.find_next('path')
incomep1 = icbg[0]
incomep2 = icbg[1]
incomep3 = icbg[2]
incomep4 = icbg[3]
incomep5 = icbg[4]
incomep6 = icbg[5]
incomep7 = icbg[6]
incomep8 = icbg[7]
incomep9 = icbg[8]
incomep10 = icbg[9]
incomep11 = icbg[10]
incomep12 = icbg[11]
incomep13 = icbg[12]
incomep14 = icbg[13]
incomep15 = icbg[14]
incomep16 = icbg[15]
incomep17 = icbg[16]
incomep18 = icbg[17]

paths = (path1, path2, path3, path4, path5, path6, path7, path8, path9, path10,
path11, path12, path13, path14, path15, path16, path17, path18)
incomes = (incomep1,incomep2,incomep3,incomep4,incomep5,incomep6,incomep7,incomep8,
incomep9,incomep10,incomep11,incomep12,incomep13,incomep14,incomep15,incomep16,incomep17,incomep18)

#set colors
colors = ['fee5d9','fcae91','fb6a4a','de2d26','a50f15']

for p in paths:
for i in range(0,17):
it = incomes[i]
if it > 20000:
color_class = 2
elif it > 25000:
color_class = 1
elif it > 30000:
color_class = 3
elif it > 35000:
color_class = 4

color = colors[color_class]
path_style = "font-size:12px;fill:#%s;fill-rule:nonzero;stroke:#000000;stroke-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel" % color
p['style'] = path_style
print(soup.prettify())

运行它会给我一个像这样的 SVG 文件:fill:#fb6a4a;fill-rule:nonzero;stroke:#000000;stroke-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel">出现 18 次,这意味着对于每条可用路径,即使这些路径有不同的收入。

问题可能出在我写比较的方式上吗?

最佳答案

根据我对您尝试执行的操作的理解,您的问题是您有 2 个 for 循环而不是一个。您应该同时遍历路径和收入。您现在的做法是遍历每条路径的所有收入。以下代码只是将路径移动到与收入相同的循环中,以便它们同时循环。

for i in range(0,17):
it = incomes[i]
p = paths[i]
if it > 20000:
color_class = 2
elif it > 25000:
color_class = 1
elif it > 30000:
color_class = 3
elif it > 35000:
color_class = 4

color = colors[color_class]
path_style = "font-size:12px;fill:#%s;fill-rule:nonzero;stroke:#000000;stroke-opacity:1;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none;stroke-linecap:butt;marker-start:none;stroke-linejoin:bevel" % color
p['style'] = path_style

关于python - 在 BeautifulSoup 和 Python 中使用 SVG 路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com