包装设计和实施

时间:2015-06-16 15:30:39

标签: python parsing python-3.x package

我不是Python的新手,但我的主要培训是Java。 Java和Python之间的差异(例如,OOP哲学,错误处理等)主要是我不熟悉的。

问题

对于实习,我正在尝试开发结构化数据解析器。我知道现有的框架,如BeautifulSoup,xml和lxml。尽管如此,我还是想建立一个专门针对包装设计,理念和组织的方法。

对我来说重要的一点是导入的语义。我希望能够像这样调用解析器(包名称为pyrse)。

#!/usr/bin/python3

from pyrse import parse
from pyrse import write
# Two imports so new users understand the divergent functionality

fd = open("/path/to/my/data.xml")
data1 = parse.xml.from.file(fd)
print(write.json.to.string(data1))

str = "<test>dummy xml data</test>"
data2 = parse.xml.from.string(str)
print(write.markdown.to.string(data2))

我知道这些示例是 little ,但我想在将来扩展它。现在,我只是想了解我应该如何在我的文件系统上构建它。

到目前为止,他是我我希望如何构建它,以获得与上面相同的结构:

pyrse/
    _dev/
        tests/
        data/
            __init__.py
            element.py
    parse/
        xml/
            __init__.py
            file.py
            string.py
            stream.py
        html/
            __init__.py
            file.py
    write/
        xml/
            __init__.py
            file.py
            string.py
        json/
            __init__.py
            file.py

在上图中完全清楚:

  • _dev是一个供开发人员使用的弱隐藏文件夹。客户端不应该导入此文件夹,解析器和编写器将从该文件夹继承自己的数据树的基类Element。在哲学上类似于lxml的{​​{1}}。
  • etree显然是结构化数据阅读器所在的包。按语言划分,这些文件夹然后按目标输入或输出方法划分。希望这个结构对于开发人员和包的客户来说都是直观的。
  • 我不知道如何在包设计中使parse工作(没有把所有的东西放在它自己的子文件夹中,这似乎很笨重,除非这是唯一的方法)。也许from甚至不需要在那里 - 但我不确定哪个对Python用户来说更加语义 - fromparse.xml.file()

总结一下,我对这将如何运作非常灵活。我真的想要:

  • 直观,语义导入
  • 最好是直观的文件布局
  • 因此可扩展/模块化开发方案

除此之外,我所拥有的只是想法和蒸发器。如果我开始计划的方式错了,我当然想知道。

感谢任何认为可以提供帮助的人!

其他信息

  • 我正在使用Python 3.3.2,我希望将它与3.x系列保持兼容。
  • 我不知道我在这里做什么。我可能对Java有一个想法,但Python(和PEP8)采用​​的方法却大不相同,所以即使我希望做的也很难。
  • 我的设计是广泛的,所以人们可以独立地编写解析器和编写器。
  • 可以在GitHub上找到parse.xml.from.file()项目给任何有兴趣帮助的人,或者在上下文中可能更有意义的事情。实际上还没有任何工作,因为我正试图提前解决整个设计问题。
  • 我的项目获得了Unlicense的许可,所以如果你个人对此感兴趣,那就去野猪吧。我希望有一天(包括我自己)对某人有用,并且我从中吸取了教训。

修订

  1. 所以mescalinumWhat Color Should the Bikeshed Be?提出了一个很好的观点,我意识到我在问一个巧妙错误的问题,这会让我分心,而不是帮助我计划它。我对包和文件系统之间的鸿沟更感兴趣;包和导入提供了它下面的文件系统的抽象层, 让我困惑。对文件系统执行pyrse和调用import pyrsepyrse.parse.xml...和调用import pyrse.parse.xml有什么影响? xml.file()文件中的内容应该是什么,文件夹应该是什么?这些如何影响进口?这个问题比前一个问题更有条理,但更准确。如果需要,我会为这个问题打开一个新问题。

0 个答案:

没有答案