只读取文件的第一行?

问题描述:

你会如何获得一个文件的第一行作为Python的字符串?只读取文件的第一行?

+2

如果您已经阅读文件(“阅读后在一个文件中“),你已经阅读了第一行! (假设至少有一行) – 2009-12-15 02:50:50

+1

请注意,现在的问题*与原来的含义不同。现在有些答案看起来很愚蠢,因为他们考虑到“阅读文件后”部分(已被删除)。 – 2016-08-03 12:42:23

这应做到:

f = open('myfile.txt') 
first = f.readline() 

infile = open('filename.txt', 'r') 
firstLine = infile.readline() 
+8

你没有关闭文件。 [用'with'解决方案](http://*.com/a/1904455/855050)更好。 – becko 2015-12-21 18:43:19

使用.readline()方法(Python 2 docsPython 3 docs):

with open('myfile.txt') as f: 
    first_line = f.readline() 

一些注意事项:

  1. 如文档指出,除非它是唯一的在文件中,从f.readline()返回的字符串将包含尾随的换行符。您可能希望使用f.readline().strip()替代删除换行符。
  2. 当块结束时,with语句会自动再次关闭该文件。
  3. with语句只在Python 2.5及以上,并在Python 2.5,你需要使用from __future__ import with_statement
  4. 在Python 3,你应该指定你打开该文件的文件编码。 Read more...
+3

在Python 3中,如果文件是ascii或utf8,则不必指定文件编码。如果不是,你应该在Python 2中将编码指定为codecs.open。 – Evpok 2012-07-19 12:15:02

+0

@Evpok *“在Python 3中,如果文件是ascii或utf8,则不必指定文件编码”* - 如果这只是严格正确的!现实情况稍微凌乱;如文档中所述,所使用的默认编码是依赖于平台的(甚至可能在同一台计算机上有所不同,具体取决于您如何启动Python - 例如,我已经看到通过假设UTF-8稍后爆发当用'mod_wsgi'通过Apache运行时)。 – 2016-10-23 22:49:28

fline=open("myfile").readline().rstrip() 
+0

我来这里寻找这个。特别是因为'rstrip()'删除了换行符。 – 2014-10-27 09:19:59

+3

-1;这不会关闭文件,并且如果第一行包含除换行符本身之外的任何尾随空格,则会返回不正确的结果。 – 2016-10-23 22:51:35

+0

@MarkAmery:实际上,因为文件句柄没有分配给一个变量,所以它立即被垃圾收集,这会关闭文件。 (当然,使用上下文管理器的接受解决方案仍然好得多。) – acdr 2018-01-19 09:07:56

这里其他的答案很多,但回答精确你问(前@MarkAmery去和编辑原来的问题,改变的意思)的问题:

>>> f = open('myfile.txt') 
>>> data = f.read() 
>>> # I'm assuming you had the above before asking the question 
>>> first_line = data.split('\n', 1)[0] 

在换句话说,如果你已经读过文件(就像你说的那样),并且在内存中有一大块数据,那么为了有效地从它获得第一行,对换行符做一个split(),一次,并从结果列表中获取第一个元素。

请注意,这不包括在行尾的\n字符,但我假设您不想要它(并且单行文件甚至可能没有)。还要注意,尽管它非常短暂且快速,但它确实复制了数据,因此对于非常大的内存块,您可能不会认为它是“高效的”。与往常一样,这取决于...

+7

如果这是一个大文件,f.read()会尝试将整个文件加载到内存中,这不是一个好主意。另一种方法是一次读取一个字符,直到遇到换行符或EOF为止 – randomThought 2009-12-15 03:04:57

+0

实际上,所有其他答案都是比这更好的替代方案。通常使用readline()和朋友阅读文件一次将加载整个块,也许32K给予或带走,并通过搜索找到下一个换行符。更快,更高效。我的回答只有在他已经*加载整个事情的时候才会有用,在这种情况下,我们可以假设他将所有内容全部放在了一起可以。 – 2009-12-15 03:23:51

+2

我不相信我改变了意思。在“读取”整个文件之后,如何从文件中“读取”第一行是没有意义的。因此,对我来说很明显,提问者的意图不是假设必须首先调用'.read()'。 – 2016-10-17 20:18:34

要返回一个打开的文件的开头,这样做:

my_file.seek(0) 
+1

只是为了更好的理解,这将是“my_file.seek(0) line = my_file.readline()” – 2016-09-04 14:59:43

first_line = next(open(filename)) 
+1

这是否也关闭该文件? – abalter 2016-11-18 07:24:05

f1 = open("input1.txt", "r") 
print(f1.readline()) 
+8

五年内有多个答案,包含*正是这种方法*。你什么都不做,只是增加另一个而产生噪音。 – 2015-07-05 14:44:36