我不是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用户来说更加语义 - from
或parse.xml.file()
?总结一下,我对这将如何运作非常灵活。我真的想要:
除此之外,我所拥有的只是想法和蒸发器。如果我开始计划的方式错了,我当然想知道。
感谢任何认为可以提供帮助的人!
parse.xml.from.file()
项目给任何有兴趣帮助的人,或者在上下文中可能更有意义的事情。实际上还没有任何工作,因为我正试图提前解决整个设计问题。pyrse
和调用import pyrse
与pyrse.parse.xml...
和调用import pyrse.parse.xml
有什么影响? xml.file()
文件中的内容应该是什么,文件夹应该是什么?这些如何影响进口?这个问题比前一个问题更有条理,但更准确。如果需要,我会为这个问题打开一个新问题。