仅打印多行文件/字符串的最后一行

Only the last line of a multiline file / string is printed

我在 Stack Overflow 上搜索了一下,偶然发现了不同的答案,但没有适合我情况的答案...

我得到了一个这样的 map.txt 文件:

+----------------------+                          
|                      |                          
|                      |                          
|                      |                          
|        test          |                          
|                      |                          
|                      |                          
|                      |                          
+------------------------------------------------+
|                      |                         |
|                      |                         |
|                      |                         |
|       Science        |       Bibliothek        |
|                      |                         |
|                      |                         |
|                      |                         |
+----------------------+-------------------------+

当我想用这个打印它时:

def display_map():
    s = open("map.txt").read()
    return s


print display_map()

它只打印我:

 +----------------------+-------------------------+      

当我对另一个文本文件尝试相同的方法时,例如:

line 1
line 2
line 3

它工作得很好。

我做错了什么?

我猜这个文件使用 CR (Carriage Return) 字符(Ascii 13 或 '\r')作为换行符;在 Windows 和 Linux 上,这只会将光标移回第 1 列,但不会将光标向下移至新行的开头。

(当然,这样的行终止符不会在复制粘贴到 Stack Overflow 后仍然存在,这就是无法复制的原因)。

您可以使用 repr:

调试字符串中的奇怪字符
print(repr(read_map())

它将打印出所有特殊字符都已转义的字符串。


如果您在 repred 字符串中看到 \r,您可以试试这个:

def read_map():
    with open('map.txt') as f:  # with ensures the file is closed properly
        return f.read().replace('\r', '\n') # replace \r with \n

或者将 U 标志提供给 open 用于通用换行符,这会将 '\r''\r\n''\n' 全部转换为 \n 不顾底层操作系统的约定阅读:

def read_map():
    with open('map.txt', 'rU') as f:
        return f.read()