2012-11-24 198 views
0

我需要一些帮助; 我想编写一个sort命令提示符下使用PythonPython:分裂和分裂

我需要拆分一个文本文件导入行然后将它们分割成字符串

例如:

分裂

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

into:

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=['*'] 

那会是p完全可以吗? 如果有的话可以解释一下如何或给我一段可以做到的代码吗?

非常感谢,

+1

你到目前为止编码了什么? –

+2

这里没有韵律或理由,为什么一件事应该是一种方式,另一件事应该是另一种方式。例如为什么'command3'完全不存在?为什么它在第一行是'command1',在第二行是'command 2'? – mgilson

+3

使用像'line1','line2'等名称的变量不是存储从文件处理的数据的正确方法,除非事先知道您将拥有多少行(甚至常常是这样)。您需要一个数据结构来存储结果,可能是列表或词典列表。将文本文件分割成多行,然后将文本分割成单词非常简单;然而,看起来你有一些相当复杂和可能定义不明确的规则来处理输入,除了分裂事物,你需要更详细地考虑这些规则。 –

回答

0

与其他人一样,您的语言设计混乱,您可能需要简化它。但是我会给你你想要的东西,并让你以困难的方式解决问题。

标准python文件对象(由open()返回)是行的迭代器,python字符串类的split()方法将字符串拆分为子字符串列表。所以,你可能会想开始是这样的:

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

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

0

,你可以使用此代码逐行读取文件中的行和单词之间的空格分开的。

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

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

如果您简化语法以使每个命令只有固定数量的参数,那么您可能会使用regular expressions代替单个命令的语法。

给它一个镜头。只是不要指望它在一夜之间全部结束。