Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中提取最后一行文本(不包括新行)?_Python_Extract - Fatal编程技术网

如何在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),但平均情况会更好