【问题标题】:Python program prints an extra empty line when reading a text filePython程序在读取文本文件时打印一个额外的空行
【发布时间】:2014-10-10 16:54:27
【问题描述】:

我正在使用 python 3.3。例如,我有一个包含三行文本的文本文件。我想选择一个数字,它将显示该行号的内容。出于某种原因,它会打印我想要的行,并在其下方打印一个空行。

文本文件如下所示:

AAPL,Apple,700
P,Pandora,32
MW,Men's Warehouse,54.32

如果 i 为 2,我在解释器中得到的输出:

>>
P,Pandora,32

>>

代码在这里:

line_number = int(input('Enter the line number: '))
with open('C:/Python33/myprogramtests/filewrite1.txt') as f:
    i = 1
    for line in f:
        if i == line_number:
            break
        i += 1
    print (line)

我确实在打印(行)后尝试了一个逗号,但它没有用。 我猜我错过了一些只打印行而不是额外的空白行的代码。

【问题讨论】:

  • 你试过调试吗?注意到你的问题真的很有帮助。使用例如。蚀。在第 2 行放置断点并在调试模式下运行。按 F6 继续。您可以在参数窗口中偷看变量值。

标签: python file python-3.x text


【解决方案1】:

print 在字符串末尾添加\n\r,并且考虑到您已阅读的行末尾已经有新行,这就是行为。你可以改用:

print(line, end="")

希望这会有所帮助!

【讨论】:

  • 谢谢,解决了!
【解决方案2】:

您应该提供一个end=''print 以禁止将等效的\n 添加到输出的自动行为。

我还会删除计数逻辑并使用islice 提取您想要的行,例如:

from itertools import islice

line_number = int(input('Enter the line number: '))
with open('yourfile') as fin:
    print(next(islice(fin, line_number - 1, line_number), ''), end='')

如果你想使用计数方法,那么你可以使用从 1 开始的enumerate,例如:

for idx, line in enumerate(fin, start=1):
    if idx == line_number:
        print(line, end='')
        break

【讨论】:

  • 感谢您提供的替代方法。 itertools 是内置模块吗?
【解决方案3】:

您还可以使用“strip()”方法删除多余的空格。在您的情况下:
打印(line.strip())

或完成一项任务:
line = line.strip()
打印(行)

【讨论】:

    【解决方案4】:

    如果要删除字符串的尾随换行,可以使用 rstrip('\n'):

    print line.rstrip('\n')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-27
      • 1970-01-01
      • 2011-12-13
      • 1970-01-01
      相关资源
      最近更新 更多