如何在Python中提取最后一行文本(不包括新行)?
文本文件:如何在Python中提取最后一行文本(不包括新行)?,python,extract,Python,Extract,文本文件: 1 2 3 4 5 6 \n \n 我知道行[-1]会为您获取最后一行,但我想忽略任何新行,获取最后一行文本(在本例中为6行) 关于内存的最佳方法是耗尽文件。大概是这样的: with open('file.txt') as f: last = None for line in (line for line in f if line.rstrip('\n')): last = line print last 不过可以做得更优雅一些。稍微不同的方法: with op
1
2
3
4
5
6
\n
\n
我知道
行[-1]
会为您获取最后一行,但我想忽略任何新行,获取最后一行文本(在本例中为6行) 关于内存的最佳方法是耗尽文件。大概是这样的:
with open('file.txt') as f:
last = None
for line in (line for line in f if line.rstrip('\n')):
last = line
print last
不过可以做得更优雅一些。稍微不同的方法:
with open('file.txt') as f:
last = None
for last in (line for line in f if line.rstrip('\n')):
pass
print last
关于内存的最佳方法是耗尽文件。大概是这样的:
with open('file.txt') as f:
last = None
for line in (line for line in f if line.rstrip('\n')):
last = line
print last
不过可以做得更优雅一些。稍微不同的方法:
with open('file.txt') as f:
last = None
for last in (line for line in f if line.rstrip('\n')):
pass
print last
读取整个文件,然后根据换行符拆分读取的文件,并创建非空元素列表。然后打印列表中的最后一个元素
with open('file') as f:
print([i for i in f.read().split('\n') if i][-1])
读取整个文件,然后根据换行符拆分读取的文件,并创建非空元素列表。然后打印列表中的最后一个元素
with open('file') as f:
print([i for i in f.read().split('\n') if i][-1])
对于一个小文件,您可以读取所有行,丢弃任何空行。请注意,我使用了一个内部生成器来剥离这些线,然后将它们排除在外部生成器中
with open(textfile) as fp:
last_line = [l2 for l2 in (l1.strip() for l1 in fp) if l2][-1]
对于一个小文件,您可以读取所有行,丢弃任何空行。请注意,我使用了一个内部生成器来剥离这些线,然后将它们排除在外部生成器中
with open(textfile) as fp:
last_line = [l2 for l2 in (l1.strip() for l1 in fp) if l2][-1]
这只是对阿维纳什·拉吉答案的编辑(但因为我是一个新客户,所以我不能对此发表评论)。这将在您的数据中保留任何None值(即,如果最后一行中的数据为“None”,它将起作用,但取决于您的输入,这可能不是问题)
这只是对阿维纳什·拉吉答案的编辑(但因为我是一个新客户,所以我不能对此发表评论)。这将在您的数据中保留任何None值(即,如果最后一行中的数据为“None”,它将起作用,但取决于您的输入,这可能不是问题)
这将打印6
,并在末尾换行。你可以决定如何脱掉它。以下是一些选择:
删除尾随的换行符answer.rstrip('\n')
删除尾随空格answer.rstrip()
answer.strip()
6
,并在末尾换行。你可以决定如何脱掉它。以下是一些选择:
删除尾随的换行符answer.rstrip('\n')
删除尾随空格answer.rstrip()
answer.strip()
打开('file.txt')作为我的文件:
对于num,枚举(myfile)中的行:
通过
打印数
打开('file.txt')作为myfile:
对于num,枚举(myfile)中的行:
通过
打印数
您的文件是否正好包含两个换行符?否,我想忽略任意数量的换行符您的文件是否正好包含两个换行符?否,我想忽略任意数量的换行符这具有可怕的空间复杂性。如果文件太大而无法放入主内存,该怎么办?是的,在这种情况下,这不是正确的文件。但对于较小的文件来说,它比其他文件快得多。这具有可怕的空间复杂性。如果文件太大而无法放入主内存,该怎么办?是的,在这种情况下,这不是正确的文件。但对于较小的文件来说,它比其他文件快得多。这具有可怕的空间效率。这张名单可能会变得太大,无法纳入主流memory@inspectorG4dget-OP提到了6行,我认为这个答案适合小文件。一个更复杂的解决方案,例如,读取尾部并扫描最后一行(使用回退来读取更多),对于小文件来说根本不需要。这具有可怕的空间效率。这张名单可能会变得太大,无法纳入主流memory@inspectorG4dget-OP提到了6行,我认为这个答案适合小文件。一个更复杂的解决方案,例如,读取尾部并扫描最后一行(使用回退来读取更多),对于小文件来说根本不需要。这是一个O(n)
解决方案。我们可以进一步优化它吗?也许您可以将文件视为二进制文件,并尝试从文件末尾获取一个块,看看它是否包含换行符等。它仍然是O(n),但平均情况会更好这是一个O(n)
解决方案。我们可以进一步优化它吗?也许您可以将文件视为二进制文件,并尝试从文件末尾获取一个块,看看它是否包含换行符等。它仍然是O(n),但平均情况会更好