2014-07-17 31 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 +"] 
相關問題