软件包设计与实现

2024-10-03 11:23:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我对Python并不完全陌生,但我的主要培训内容是Java。Java和Python之间的区别(例如,OOP原理、错误处理等)主要是我不熟悉的。在

问题

在实习期间,我试图开发一个结构化数据解析器。我知道现有的框架,比如beauthoulsoup、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))

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

到目前为止,他是我思考的方式,我希望这是结构化的,以获得与上述相同的结构:

^{pr2}$

在上图中要完全清楚:

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

总而言之,我对这件事的运作方式非常灵活。我真的想要:

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

除此之外,我只有想法和幻想。如果我开始计划有错,我肯定想知道。在

感谢那些认为他们能帮上忙的人!在

附加信息

  • 我使用的是python3.3.2,我希望它与3.x系列兼容。在
  • 我不知道我在这里做什么。我可能对Java有一个想法,但是Python(和PEP8)采用的方法截然不同,所以即使我希望做什么也很困难。在
  • 我设计的是广泛的,这样人们就可以独立地编写解析器和编写器。在
  • 这个pyrse项目可以在GitHub上找到,任何有兴趣帮忙的人,或者在上下文中这可能更有意义的事情。实际上还没有任何工作投入,因为我正试图提前处理整个设计问题。在
  • 我的项目是未经授权的,所以如果你个人对此感兴趣的话就疯狂地去吧。我只是希望有一天它对某些人(包括我自己)有用,并从中吸取教训。在

修订版

  1. 所以mescalinumWhat Color Should the Bikeshed Be?提出了一个很好的观点,我意识到我问的是一个微妙的错误问题,它会分散我的注意力,而不是帮助我计划它。我更感兴趣的是包和文件系统之间的区别;包和导入提供了一个从它下面的文件系统抽象的层,这使我困惑。做import pyrse并调用pyrse.parse.xml...import pyrse.parse.xml并调用xml.file()对文件系统有什么影响?在.py文件中应该有什么,文件夹应该是什么?这些对进口有何影响?这个问题比上一个问题组织得少,但更准确。如果需要的话,我会为这个问题提出一个新的问题。在

Tags: to数据fromimport文件夹解析器stringparse