【问题标题】:How to skip the extra newline while printing lines read from a file?如何在打印从文件中读取的行时跳过额外的换行符?
【发布时间】:2013-06-10 15:40:17
【问题描述】:

我正在从标准输入读取我的 python 程序的输入(我已将一个文件对象分配给标准输入)。输入的行数事先不知道。有时程序可能只有 1 行、100 行甚至根本没有行。

import sys
sys.stdin  = open ("Input.txt")
sys.stdout = open ("Output.txt", "w")

def main():
    for line in sys.stdin:
        print line

main()

这是最接近我的要求的。但这有一个问题。如果输入是

3
7 4
2 4 6
8 5 9 3

打印出来

3

7 4

2 4 6

8 5 9 3

它在每一行之后打印一个额外的换行符。如何修复此程序或解决此问题的最佳方法是什么?

编辑:这是运行示例http://ideone.com/8GD0W7


EDIT2:感谢您的回答。我知道错误了。

import sys
sys.stdin  = open ("Input.txt")
sys.stdout = open ("Output.txt", "w")

def main():
    for line in sys.stdin:
        for data in line.split():
            print data,
        print ""

main()

像这样更改程序,它按预期工作。 :)

【问题讨论】:

  • 反对者,请告诉我如何改进这篇文章。
  • 我会说两个可能的不赞成票的原因: 1. 标题具有误导性,它根本与 EOF 的处理无关; 2.在EDIT2中,为什么还需要拆分?您应该打印line,line.strip(),但您的代码也会压缩空格。

标签: python


【解决方案1】:

python print 语句添加了一个换行符,但原来的行上已经有一个换行符。您可以通过在末尾添加逗号来抑制它:

print line , #<--- trailing comma

对于 python3,(print 成为一个函数),这看起来像:

print(line,end='') #rather than the default `print(line,end='\n')`.

或者,您可以在打印之前从行尾去除换行符:

print line.rstrip('\n') # There are other options, e.g. line[:-1], ... 

但我认为那几乎没有那么漂亮。

【讨论】:

  • 或者,当您关心外观时,使用 sys.stout.write() 而不是打印。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-20
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多