我正在尝试创建一个后缀计算器。我有一个名为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)
我仍然无法将每个数字和操作推到堆栈上。
答案 0 :(得分:2)
如果您可以控制输入文件,那么在unix上使用tr
最简单:
tr '\n' '' < input_file
如果你必须使用python,这将有效:
with open('file') as f:
expression = f.read().replace('\n', '')
请注意,我使用的是f.read()
而不是f.readlines()
。 f.read()
返回一个字符串而不是一个字符串列表,这样可以节省您以后重新加入这些行。
答案 1 :(得分: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+'
答案 2 :(得分:0)
expressions = "".join(line.rstrip("\n") for line in open("expressions.txt", "r"))
答案 3 :(得分: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 +"]
答案 4 :(得分:-1)
replace
代替strip
,也可以为您服务:
with open("expressions.txt") as f:
expression = "".join(line.strip("\n") for line in f)