文本文件中的最后一行缺少换行符;如何应对?

Last line in text file lacks newline; how to cope?

我正在读取文件的行并将它们存储在数组中。 文件内容如下-

hi
hello
bi
bello

我正在编写一个程序来颠倒这些单词的顺序,以便它们现在被写入一个新文件

bello
bi
hello
hi

目前,我正在使用

读取文件

file1 = open('example.txt','r')
s = file1.readlines()

当我检查数组 's' 时,它看起来像这样 -

['hi\n', 'hello\n', 'bi\n', 'bello']

现在我使用 s[::-1] 来颠倒顺序,但这导致输出看起来像 -

bellohi
hello
bi

大概是因为 'bello' 在存储它的数组中没有跟着 \n 。

我试图通过像这样操纵最后一项来修复它

s[-1]=s[-1]+'\n'

从表面上看,它有效 - 但我是否在不知不觉中打印出额外的一行或其他内容或添加尾随空格?有一个更好的方法吗?还有为什么数组中的最后一个字符串没有 '\n'

您可以使添加有条件:

if not s[-1].endswith('\n'):
    s[-1] += '\n'

或者您可以通过删除任何尾随的换行符然后放回一个来规范化:

s[-1] = s[-1].rstrip('\n') + '\n'

我会选择前者,但你会看到这两种方法。

有关从列表元素中删除 \n 的帮助,请参阅 this answer

请参阅此 answer 以获取有关如何反转列表的帮助。

此代码将为您提供所需的列表。可以重构得更好......但这对你来说可能是一个挑战。

s = ['hi\n', 'hello\n', 'bi\n', 'bello']
revList = list(reversed(s)) 

for i, e in enumerate(revList):
    revList[i] = e.strip("\n")
    if i < len(revList)-1:
        revList[i] = e + "\n"
print(revList)

当Python读取文件时,它会读取换行符,因为它们是字符串。所以第一个文件中的最后一个单词下面没有换行,所以这就是为什么它在列表中没有“\n”的原因。

当您使用 [i-1] 时,您将向后浏览列表,但您会保持换行符的顺序。如果您一点一点地完成您的代码,您就会明白为什么会得到您正在得到的输出。请记住,计算机从字面上理解事物。