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

我觉得自己很愚蠢。我是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_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个实体。如何获取更多信息,如:图层名称、哪些实体

  • 如何实际访问实体(例如,我知道有两行)?我怎样才能拿到台词

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

看起来这个库应该已经可以使用了,但是对于比我更了解Python的人来说可能是这样。

试试下面的例子:

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())