- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在各个方面都是新手(SO、Python、beautifulsoup 等),所以请耐心等待。
我正在尝试按照 Flowingdata.com 上的教程(如何使用免费工具制作美国县专题 map )创建具有不同类型数据的各种 map 。
我可以毫无错误地复制教程,因此没有版本问题(我在 Mac OS 10.8 上使用 Python 2.7.5 和 BeautifulSoup 4.3.1)。我想使用(更详细的)州县 map 并用不同的数据对它们进行着色。我在适当的文件中拥有 map (svg)和数据(csv)。这是我当前正在运行的脚本:
import csv
from BeautifulSoup import BeautifulSoup
totpop = {}
reader = csv.reader(open('datafile.csv', 'rU'), delimiter=",")
for row in reader:
try:
id = row[0]
pop = float( row[1].strip() )
totpop[id] = pop
except:
pass
svg = open('mapfile.svg', 'r').read()
soup = BeautifulSoup(svg, selfClosingTags=['defs', 'sodipodi:namedview', 'path'])
paths = soup.findAll('path')
colors = ["#F1EEF6", "#D4B9DA", "#C994C7", "#DF65B0", "#DD1C77", "#980043"]
path_style = 'fill-rule:nonzero; stroke: #ffffff; stroke-width: 5; stroke-opacity: 1; fill: '
# Colorize based on data
for p in paths:
try:
pop = totpop[p['id']]
except:
continue
if pop > 750000:
color_class = 6
elif pop > 500000:
color_class = 5
elif pop > 250000:
color_class = 4
elif pop > 125000:
color_class = 3
elif pop > 75000:
color_class = 2
elif pop > 25000:
color_class = 1
else:
color_class = 0
color = colors[color_class]
p['style'] = path_style + color
print soup.prettify()
我收到以下错误:
File "scriptname.py", line 54, in color = colors[color_class] IndexError: list index out of range
(“第 54 行”可能不匹配,因为我删除了示例代码中的一些注释行)
对于svg文件来说,它既有路径又有路径组(路径组是由多个路径组成的县)。单路径县将县名称作为“id”。多路径县的县名称作为组“id”,但嵌套路径具有数字 ID。我希望将样式应用于与数据文件中的县名称匹配的路径或组(我完全知道示例代码现在不处理组)。为了测试,我在一个只有路径(没有组)的示例 svg 上运行了脚本,它运行得非常好......所以我知道有些东西是正确的。我认为问题出在带有数字 ID 的组和/或路径(组内)。
如何解决该错误?我尝试删除组并将所有多路径 ID 更改为相同的内容...但这也不起作用。如果没有明确忽略数字 ID,它们是否会导致问题?
我想知道是否可以运行一个脚本,使用某种“isalpha”工具或“startswith”(任何字母)来挑选出具有名称(无数字/数字)的路径和/或组以避免索引错误。
我希望提供足够的信息。
这里是 svg maps 之一的链接(我已经从我的工作文件中删除了clippath和state_outline)这里是相应的datafile的链接
如果您测试这些文件,您可能会遇到 View 框问题,但我已经单独解决了这个问题。
感谢您的帮助!
最佳答案
从外观上看,您可能会假设以下数组:
颜色 = ["#F1EEF6", "#D4B9DA", "#C994C7", "#DF65B0", "#DD1C77", "#980043"]
这里的元素索引为 1, 2, 3, 4, 5, 6。索引实际上是以 0 开头,而不是 1。所以“#F1EEF6”实际上是元素 0 和最后一个元素(“#980043") 是数组中的第 5 号。在 if pop
语句中,您需要进行此调整。
此外,您还需要更改 else
语句,将 color_class
设置为可用于确定是否应尝试获取有效颜色的内容。我在想一些类似的事情:
<前>其他:
颜色类别=空
如果 color_class != null
颜色 = 颜色[颜色类别]
p['样式'] = 路径样式 + 颜色
我不熟悉 Python 语法,因此其中可能存在错误,但希望您能明白我在这里试图展示的想法。
关于python - 利用 "isalpha"或 "startswith"和/或故障排除 "list index out of range error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19225619/
我有一个名为“members”的数据库表。分配给成员的是一个职位。 职位 来自部门。我有 Departments,然后是那些中的 Sub-Departments 和 Sub-Departments 中
我正在尝试为 Solr 搜索应用过滤器标记 Tagging_and_excluding_Filters . 挑战在于同时应用多个标记(对于单个页面上的多个选择选项)。例如 q=mainquery&fq
我知道这个问题已经被问过很多次了,我已经尝试了所有建议,并阅读了有关不同选择器等的所有内容,但没有任何对我有用 给出以下 HTML 片段: link
是否有直接的 LINQ 语法来查找集合 B 中不存在的集合 A 的成员?在 SQL 我会写这个 SELECT A.* FROM A LEFT JOIN B ON A.ID = B.ID WHERE B
我试图排除并在现有xpath中包括以下xpath,但不太确定如何做到这一点 //exclude -> //*[@id="ires"]/ol/li[6]/div/a[1]/img //include
我有 30 个站点,我需要在其中 24 个站点上回显某些内容。我怎样才能排除其他人?该代码不起作用,因为我认为它的逻辑是假的:) $currentsite = get_bloginfo('wpurl'
我需要对目标文件夹进行检查,并检查文件是否来自今天,并且超过5kb 下面的命令根据使用今天的日期存在的文件来提供bool值,但是我还要添加-gt5kb之类的排除项 我尝试使用-Exlcude,但不确定
我编入索引的Elasticsearch文档包含许多字段。我一直在使用match_all查询来获取结果。我想从match_all中排除一些字段,这可能吗? 最佳答案 在Elasticsearch中,您可
我正在为我的 DAO 编写一些测试,因为很多测试使用保存到我的数据库中的测试对象,所以我使用注释 @Before 和 @Before 创建了 setup() 和teardown() 方法@After
我编写了一个程序来解决以下问题: Implement a diffusion limited aggregation simulation on a toroid plane where seeds
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
很多时候我必须运行这个查询: select * from users where name is not null and name != '' 有没有更好的方法来做到这一点。我需要更多的性能,任何建
如果检测到某个操作系统,是否有一种简单的方法可以排除某些代码? 我设计了一个运行良好的网站(它是一个 sidescroller),当使用滚轮(向上/向下)时,它会左右滚动。但是,如果您使用的是 Mac
我应该如何排除“IN”子句中的值? $Graduates = "45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,6
很明显,如果一个 Mysql 表的全文索引包含一个出现在 50% 的数据行中的关键字,该关键字将被匹配查询忽略 因此,如果我有一个包含 50 个条目的全文索引“content”的表其中 27 个条目在
我有下面的循环。 我需要提取所有不包含字母 p 的名称 (lskey),但我的尝试不起作用。 for(var i = 0; i "); } } 如果有人能回答,我将不胜感激。 最佳答案 如此接
我正在尝试查找 FTP 服务器上根目录的总大小。但是,我无权访问根目录中的其中一个目录。 我想用这个函数对根目录的大小求和: size = 0 for filename in ftp.nlst("."
我有以下正则表达式来匹配 html 链接: 有点效果。除了不是真的。因为它在 编辑: 这将使它只抓取引号而不是 之后的所有内容 最佳答案 我认为您的正则表达式没有按照您的意愿行事。 这会非贪婪地捕
我在提出异常方面遇到困难,例如: import csv o = open('/home/foo/dummy.csv', 'r') # Empty file! reader = csv.reader(o
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我是一名优秀的程序员,十分优秀!