仅打印多行文件/字符串的最后一行
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())
它将打印出所有特殊字符都已转义的字符串。
如果您在 repr
ed 字符串中看到 \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()
我在 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())
它将打印出所有特殊字符都已转义的字符串。
如果您在 repr
ed 字符串中看到 \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()