2014-07-17 33 views
0

我想创建一个后缀计算器。我有一个名为expressions.txt的文件,它有六个后缀操作。当我阅读这些文件时,它给了我一大串新的列表。例如,如何将从文件读取的行转换为一个长字符串?

f = open("expressions.txt", "r") 
expression = f.readlines() 

给我:

['5 4 3 + 2 * -\n', '8 5 *\n', '20 5 /\n', '3 8 6 + *\n', '3 4 + 9 - 12 +\n', '9 3 2 1 + + /\n', '3 + 4\n', '* 3 4 5 + *\n', '4 9 1 3 + -\n', 'h 3 +\n'] 

我需要

['5 4 3 + 2 * 8 5 * 20 5/3 8 6 ... ] 

等等等等。我想弄清楚如何不把每行都放到一个列表中,我需要把每一行加入到一个大字符串中。

编辑: 好的,这里是完整的代码。

from ArrayStack import * 

evaluation = Stack() 

def main(): 
    count = 0 
    f = open("expressions.txt", "r") 
    l = f.readlines() 
    for char in l: 
    char.replace("\n","") 
    char.split(' ') 
    evaluation.push(char) 
    print(evaluation.data) 

它仍然没有工作到我可以将每个数字和操作推送到堆栈的位置。

回答

1
>>> l = ['5 4 3 + 2 * -\n', '8 5 *\n', '20 5 /\n', '3 8 6 + *\n', '3 4 + 9 - 12 +\n', '9 3 2 1 + + /\n', '3 + 4\n', '* 3 4 5 + *\n', '4 9 1 3 + -\n', 'h 3 +\n'] 
>>> s ="".join(i.replace("\n","") for i in l) 
'5 4 3 + 2 * -8 5 *20 5 /3 8 6 + *3 4 + 9 - 12 +9 3 2 1 + + /3 + 4* 3 4 5 + *4 9 1 3 + -h 3 +' 

此外,如果你想要把它一步来解析准备(如果这就是你要什么),你可以做到这一点

>>> s.replace(" ","") 
'543+2*-85*205/386+*34+9-12+9321++/3+4*345+*4913+-h3+' 
-1

相反的replacestrip可以为您服务太:

with open("expressions.txt") as f: 
    expression = "".join(line.strip("\n") for line in f) 
+0

亲爱downvoter,让我知道,我怎么能提高我的答案。 –

0
expressions = "".join(line.rstrip("\n") for line in open("expressions.txt", "r")) 
2

如果你能控制输入文件,这是最简单的与tr在UNIX上:

tr '\n' '' < input_file 

如果你有使用Python,这将工作:我用f.read()代替f.readlines()

with open('file') as f: 
    expression = f.read().replace('\n', '') 

通知。 f.read()返回一个字符串而不是一个字符串列表,这样可以避免以后重新加入这些行。

+1

也许用单个空格而不是空字符串替换。 – wwii

0
expression = ['5 4 3 + 2 * -\n', '8 5 *\n', '20 5 /\n', '3 8 6 + *\n', '3 4 + 9 - 12 +\n', '9 3 2 1 + + /\n', 
      '3 + 4\n', 
     '* 3 4 5 + *\n', '4 9 1 3 + -\n', 'h 3 +\n'] 

expression = [''.join([char for char in ''.join(expression) if char != '\n'])] 

输出:

["5 4 3 + 2 * -8 5 *20 5 /3 8 6 + *3 4 + 9 - 12 +9 3 2 1 + + /3 + 4* 3 4 5 + *4 9 1 3 + -h 3 +"] 
相关问题