Python:如何使用第三方库

时间:2013-05-19 11:33:12

标签: python libraries

我感觉完全愚蠢。我是Python初学者,想要使用第三方库,例如dxfgrabber

我玩过以下内容,在帮助部分中给出,但我不知道:

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>

我的问题:

  • 所以我知道有6层和2个实体。如何获得更多信息,例如:图层名称,哪些实体?

  • 我如何实际访问实体(例如我知道有两行)?我怎样才能得到这些线?

  • 我想编写代码,以便在画布上显示实体(如线条)。

看起来这个库应该可以使用了,但也许对于那些对我有更多了解Python的人来说。

2 个答案:

答案 0 :(得分:1)

试着举例:

for layer in dxf.layers:
    print layer.name, layer.color

<强>解释

上次打印命令的输出表明dxf.layersLayerTable个对象。在documentation中,您可以看到LayerTable对象具有属性:

LayerTable.__iter__()
Iterate over all layers, yields Layer objects.

这意味着它可以在for循环或任何需要迭代的构造中迭代。对于实体,您可以执行以下操作:

all_layer_0_entities = [entity for entity in dwg.entities if entity.layer == '0']

这里应用相同的原则,对象dwg.entities正在迭代,在每次迭代中产生一个实体。

您说文档可以使用更多示例。其中一些内容见this post

答案 1 :(得分:1)

从上次打印中你可以看到你有LayerTable个对象; documentation for LayerTable表示应该有.layernames()方法,以及.get(layername)方法来获取各个图层。

它还声明您可以迭代对象(有.__iter__()方法),因此您可以使用for layer in dxf.layers:来获取个人Layer objects

同样的信息可用于EntitySection object,它也有一个__iter__()方法来循环定义的2个实体。然后,文档会列出您可能遇到的entity types,以及有关如何访问其信息的进一步文档。

不幸的是,图书馆中至少有一个错误; LayerTable.__iter__()方法不返回正确类型的对象。快速浏览source code表示其他__iter__()方法执行会返回正确的项目。

您可以使用

for layername in dxf.layers.layernames():
    layer = dxf.layers.get(layername)

现在,或直接调用__iter__()方法:

for layer in dxf.layers.__iter__():
    # ..

我已经提交pull request来解决问题。