读取sys.stdin中的最后一行

问题描述 投票:0回答:1

对于编码问题,我必须使用sys.stdin读取数据。但是,我使用的方法是for循环迭代sys.stdin,它失败,因为输入测试用例后输入不包括换行符。

样本输入:

10 20
#################---
##-###############--
#---################
##-#################
########---#########
#######-----########
########---#########
##################--
#################---
##################-#
3 10
#-########
----------
#-########

用于读取输入的代码:

grids = []
for line in stdin:
    if line == "\n":
        break
    m, n = map(int, line.split())
    grid = []
    for row in range(m):
        r = list(stdin.readline().strip())
        print("ROW:",r)
        grid.append(r)
    grids.append(grid)
return grids

电流输出:

ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '#']
ROW: ['#', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-']

期望的输出:

ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-', '#', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '-', '-']
ROW: ['#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '#', '-', '#']
ROW: ['#', '-', '#', '#', '#', '#', '#', '#', '#', '#']
ROW: ['-', '-', '-', '-', '-', '-', '-', '-', '-', '-']
ROW: ['#', '-', '#', '#', '#', '#', '#', '#', '#', '#']

可以看出,最后一行未打印,因此未读取,因为换行中不包含换行符。因此,有什么方法可以让我阅读最后一行吗?请指教。

我正在使用Pycharm Community Edition 2017。

编辑:

当我在IDLE shell中运行它时,这个问题就解决了,我怀疑Pycharm的版本有一些bug,导致这个错误。无论如何,谢谢你的帮助。

python-3.x stdin
1个回答
1
投票

检查输入结尾是否包含“\ n”。

来自python文档的片段:https://docs.python.org/3/tutorial/inputoutput.html?highlight=readline

f.readline()从文件中读取一行;换行符(\ n)留在字符串的末尾,如果文件没有以换行符结尾,则只在文件的最后一行省略。这使得返回值明确无误

© www.soinside.com 2019 - 2024. All rights reserved.