【问题标题】:Replace newline in python when reading line for line逐行读取时替换python中的换行符
【发布时间】:2017-01-27 05:38:51
【问题描述】:

我正在尝试对 python 中的文本进行简单的解析,我在 bash 中使用 tr '\n' ' ' 没有问题。基本上将所有行放在一条线上。在 python 中打印行与我理解的有点不同。 re.sub 找不到我的新行,因为它不存在,即使我打印到输出它确实存在。有人可以解释我如何在 python 中解决这个问题吗?

到目前为止,这是我的代码:

# -*- iso-8859-1 -*-
import re
def proc():
    f= open('out.txt', 'r')
    lines=f.readlines()
    for line in lines:
        line = line.strip()
        if '[' in line:
            line_1 = line
            line_1_split = line_1.split(' ')[0]
            line_2 = re.sub(r'\n',r' ', line_1_split)
            print line_2
proc()

编辑:我知道“打印行”将在没有换行符的情况下打印。问题是我需要在逐行执行操作之前和之后处理这些行。我在 shell 中的代码使用 sed、awk 和 tr 来执行此操作。

【问题讨论】:

  • line.strip() 删除 all 前导和尾随空格,包括 \n。顺便说一句,如果您想逐行处理,最好使用for line in f:,而不是使用readlines 将整个文件读入列表,然后遍历列表。
  • print 在输出末尾添加一个换行符。见stackoverflow.com/q/493386/2800918
  • @CAB 有意义

标签: python regex newline python-2.x


【解决方案1】:

可以直接写入stdout,避免print自动换行:

from sys import stdout
stdout.write("foo")
stdout.write("bar\n")

这将在一行上打印foobar

【讨论】:

  • 我认为这是最好的答案。不漂亮,但似乎最有效
【解决方案2】:

当您调用print 语句时,您会自动添加一个新行。只需添加一个逗号:

print line_2,

而且它们都将打印在同一行。

请注意,如果您尝试获取文件的所有行并将它们打印在一行上,有更有效的方法可以做到这一点:

with open('out.txt', 'r') as f:
    lines = f.readlines()
    for line in lines:
        line = line.strip()
        # Some extra line formatting stuff goes here
        print line, # Note the comma!

或者,只需将行加入字符串:

everything_on_one_line = ''.join(i.strip() for i in f.readlines())
print everything_on_one_line

【讨论】:

  • 这对核心问题有效,但处理前后每一行的操作并不容易。
【解决方案3】:

使用with 可确保您在迭代后关闭文件。

迭代可以节省内存并且不会加载整个文件。

rstrip() 删除最后的换行符。

综合:

with open('out.txt', 'r') as f:
    for line in f:
        print line.rstrip(),

【讨论】:

  • 这行得通,但是你必须打印到某些东西,然后它就没有用了。如果我可以 var = print line 那就太好了,但它不能正常工作
【解决方案4】:

使用replace() 方法。

file = open('out.txt', 'r')
data = file.read()
file.close()
data.replace('\n', '')

【讨论】:

  • 这并不能解决问题。字符串中没有任何行开头,因此替换不会做任何事情。问题其实出在打印语句上。
  • 在python3中可以使用print('text', end='')来转义新行。
  • 虽然这不是python 3,是python 2。答案还是漏掉了问题中的问题。
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2013-09-22
  • 1970-01-01
  • 1970-01-01
  • 2012-04-04
  • 2013-08-30
  • 2015-11-23
  • 1970-01-01
相关资源
最近更新 更多