Python:如何使用第三方库
我觉得自己很愚蠢。我是Python初学者,希望使用第三方库,例如 我已经使用了以下内容,这些内容在“帮助”部分给出,但我不知道更多内容:Python:如何使用第三方库,python,libraries,Python,Libraries,我觉得自己很愚蠢。我是Python初学者,希望使用第三方库,例如 我已经使用了以下内容,这些内容在“帮助”部分给出,但我不知道更多内容: import dxfgrabber dxf = dxfgrabber.readfile("1.dxf") print("DXF version: {}".format(dxf.dxfversion)) header_var_count = len(dxf.header) layer_count = len(dxf.layers) entity_c
import dxfgrabber
dxf = dxfgrabber.readfile("1.dxf")
print("DXF version: {}".format(dxf.dxfversion))
header_var_count = len(dxf.header)
layer_count = len(dxf.layers)
entity_count = len(dxf.entities)
print layer_count
print entity_count
print dxf.layers
到目前为止的产出是:
DXF version: AC1009
6
2
<dxfgrabber.layers.LayerTable object at 0x10f42b590>
DXF版本:AC1009
6.
2.
我的问题是:
- 所以我知道有6层和2个实体。如何获取更多信息,如:图层名称、哪些实体
- 如何实际访问实体(例如,我知道有两行)?我怎样才能拿到台词
- 我想编写代码,以便在画布上显示实体(如线)
for layer in dxf.layers:
print layer.name, layer.color
说明:
上次打印命令的输出表明dxf.layers
是一个LayerTable
对象。在中,您可以看到LayerTable
对象具有以下属性:
LayerTable.__iter__()
Iterate over all layers, yields Layer objects.
这意味着它可以在for循环中迭代,或者在任何采用iterable的构造中迭代。对于实体,您可以执行以下操作:
all_layer_0_entities = [entity for entity in dwg.entities if entity.layer == '0']
此处应用相同的原理,对象dwg.entities正在迭代,每次迭代生成一个实体
您是对的,文档可以使用更多的示例。请参阅以了解其中一些内容。从上次打印的内容中,您可以看到您有一个
LayerTable
对象;声明应该有一个.layernames()
方法,以及一个.get(layername)
方法来获取各个层
它还声明您可以在对象上迭代(有一个。\uuuuu iter\uuuu()
方法),因此您可以对dxf中的层使用
同样的信息也可用于,它也有一个\uuuu iter\uuu()
方法来循环定义的两个实体。然后,文档将列出您可能遇到的问题,以及有关如何访问其信息的进一步文档
不幸的是,库中至少有一个bug;LayerTable.\uuuu iter\uuuu()
方法未返回正确的对象类型。快速浏览一下就会发现,其他\uuuuuuuuuuuuuuuuuuuuuuuuier()
方法确实返回了正确的项
你可以用
for layername in dxf.layers.layernames():
layer = dxf.layers.get(layername)
现在改为直接调用\uuu iter\uuu()
方法:
for layer in dxf.layers.__iter__():
# ..
我已经向@elyase提交了一份解决方案。到@elyase:我尝试了dxf中的图层。图层:打印图层。名称,图层。颜色
,这给了我…TypeError:iter()返回了“list”类型的非迭代器。
@solarisman:有趣,这听起来像是库中的一个bug。对dxf.layers中的层使用。\uuu iter\uuu():
现在改为,但如果可以的话,一定要向项目报告。@solarisman:看了一点,我可以看到更多的小错误;\uuuu iter\uuuu()
方法肯定是失败的。应使用返回iter(self.\u layers.values())
而不是返回self.\u layers.values())
。