如何将文件中的多行转换为一个长字符串?
我正在尝试创建一个后缀计算器。我有一个名为 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)
但它仍然无法正常工作,我无法把每个数字和运算符推入栈中。
5 个回答
-1
除了用 replace
,你也可以用 strip
来达到目的:
with open("expressions.txt") as f:
expression = "".join(line.strip("\n") for line in f)
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 +"]
0
在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有bug,或者是使用的工具和环境不对。为了找到问题的根源,我们可以通过调试来一步步检查代码,看看哪里出了问题。
调试的过程就像是侦探破案,我们需要仔细观察每一行代码,看看它们是如何工作的。我们可以使用一些工具来帮助我们,比如在代码中设置断点,这样程序运行到这里时会暂停,让我们有机会检查当前的状态和变量的值。
另外,查看错误信息也是很重要的。错误信息通常会告诉我们出错的地方和原因,虽然有时候它们可能看起来很复杂,但仔细分析后会发现其中的线索。
总之,调试是一个重要的技能,通过不断练习,我们可以提高找到和解决问题的能力。
expressions = "".join(line.rstrip("\n") for line in open("expressions.txt", "r"))
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
如果你能控制输入文件,使用unix系统上的 tr
命令是最简单的:
tr '\n' '' < input_file
如果你必须使用python,这段代码也能实现:
with open('file') as f:
expression = f.read().replace('\n', '')
注意我用了 f.read()
而不是 f.readlines()
。 f.read()
会返回一个字符串,而不是字符串列表,这样就省去了后面再把行合并的麻烦。