【问题标题】:How to convert lines read from a file into one long string?如何将从文件中读取的行转换为一个长字符串?
【发布时间】:2014-09-07 16:59:06
【问题描述】:

我正在尝试创建一个后缀计算器。我有一个名为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)

它仍然无法将每个数字和操作压入堆栈。

【问题讨论】:

    标签: python file-io input output readlines


    【解决方案1】:

    如果您可以控制输入文件,这在 unix 上使用 tr 是最简单的:

    tr '\n' '' < input_file
    

    如果你必须使用 python,这将工作:

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

    请注意,我使用了f.read() 而不是f.readlines()f.read() 返回一个字符串而不是字符串列表,这样可以节省您以后重新加入行。

    【讨论】:

    • 可能用一个空格代替空字符串。
    【解决方案2】:
    >>> 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+'
    

    【讨论】:

      【解决方案3】:
      expressions = "".join(line.rstrip("\n") for line in open("expressions.txt", "r"))
      

      【讨论】:

        【解决方案4】:
        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 +"]
        

        【讨论】:

          【解决方案5】:

          代替replacestrip 也可以为您服务:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-23
            • 1970-01-01
            • 1970-01-01
            • 2022-01-09
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多