【问题标题】:Python : splitting and splittingPython:分裂和分裂
【发布时间】:2012-11-24 05:23:36
【问题描述】:

我需要一些帮助; 我正在尝试用 python 编写一种命令提示符

我需要将文本文件拆分为行,然后将它们拆分为字符串

例子:

拆分

command1 var1 var2;
command2 (blah, bleh);
command3 blah (b bleh);
command4 var1(blah b(bleh * var2));

进入:

line1=['command1','var1','var2']

line2=['command2']
line2_sub1=['blah','bleh']

line3=['blah']
line3_sub1=['b','bleh']

line4=['command4']
line4_sub1=['blah','b']
line4_sub2=['bleh','var2']
line4_sub2_operand=['*']

这可能吗? 如果是这样,有人可以解释如何或给我一段代码来做到这一点吗?

非常感谢,

【问题讨论】:

  • 到目前为止你编码了什么?
  • 这里没有押韵或理由来解释为什么一件事应该是一种方式,而另一件事应该是另一种方式。例如为什么command3 完全不存在?为什么第一行是command1,第二行是command 2
  • 使用名称为line1line2 等的变量不是存储从文件处理的数据的正确方法,除非您事先确切知道您将拥有多少行(甚至经常如此)。您需要一个数据结构来存储结果,可能是列表列表或字典列表。将文本文件拆分为行,然后将行拆分为单词非常容易;但是,您似乎有一些相当复杂且可能定义不明确的规则来处理输入,而不仅仅是拆分事物,您需要更详细地考虑这些规则。
  • 此外,表示通常是一棵树,因此您应该使用line4_sub1 而不是line4_sub1_sub1(使用您自己的符号)。诸如乘法之类的操作通常会转换为类似 RPN 的表示形式,例如 [multiply [operand1operand2]]。

标签: python arrays string code-separation


【解决方案1】:

有人指出,您的语言似乎没有道理。我所能做的就是将您指向pyparsing,如果我要解决与此类似的问题,我会使用它,这里是pyparsing example for the python language

【讨论】:

    【解决方案2】:

    就像其他人所说的那样,您的语言设计令人困惑,您可能需要对其进行简化。但我会给你你正在寻找的东西,让你用困难的方式弄清楚。

    标准的python文件对象(由open()返回)是行的迭代器,python字符串类的split()方法将一个字符串分割成一个子串列表。因此,您可能希望从以下内容开始:

    for line in command_file
        words = line.split(' ')
    

    http://docs.python.org/3/library/string.html

    【讨论】:

      【解决方案3】:

      您可以使用此代码逐行读取文件并用单词之间的空格将其分割。

      a= True
      f = open(filename)
      while a:
          nextline=f.readline()
          wordlist= nextline.split("")
          print(wordlist)
          if nextline=="\n":
              a= False
      

      【讨论】:

        【解决方案4】:

        您所说的是编写一种简单的编程语言。如果您知道自己在做什么,这并不是特别困难,但这是大多数人需要上一整个学期的课程才能学习的东西。您拥有多种不同类型的词法单元以及看起来不平凡的递归语法这一事实意味着您将需要一个扫描器和一个解析器。如果您真的想自学这样做,this 可能不是一个糟糕的起点。

        如果您简化语法,使每个命令只有固定数量的参数,您可能可以不使用 regular expressions 来表示各个命令的语法。

        试一试。只是不要指望它会在一夜之间自行解决。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-02-06
          • 1970-01-01
          • 2010-10-25
          • 1970-01-01
          • 1970-01-01
          • 2021-02-16
          • 2019-06-23
          相关资源
          最近更新 更多