只读文件的第一行?

har*_*lss 184 python file

你如何只用Python的字符串获取文件的第一行?

Tor*_*amo 314

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

with open('myfile.txt') as f:
    first_line = f.readline()
Run Code Online (Sandbox Code Playgroud)

一些说明:

  1. 如文档中所述,除非它是文件中的唯一行,否则返回的字符串f.readline()将包含尾随换行符.您可能希望使用它f.readline().strip()来删除换行符.
  2. with当块结束时,该语句会自动再次关闭文件.
  3. with语句仅适用于Python 2.5及更高版本,在Python 2.5中需要使用from __future__ import with_statement
  4. 在Python 3中,您应该为打开的文件指定文件编码.阅读更多...

  • 在Python 3中,如果文件是ascii或utf8,则不必指定文件编码.如果不是,你应该在Python 2中指定codecs.open的编码. (3认同)
  • @Evpok *“在Python 3中,如果文件是ascii或utf8,则不必指定文件编码” *-如果仅严格要求!现实有点混乱。如文档中所述,使用的默认编码取决于平台(并且在同一台计算机上可能会有所不同,具体取决于您启动Python的方式-例如,我通过假定UTF-8稍后爆炸看到了在我的普通Shell上工作的代码)通过`mod_wsgi`在Apache中运行时)。 (2认同)

Jae*_*ebi 20

infile = open('filename.txt', 'r')
firstLine = infile.readline()
Run Code Online (Sandbox Code Playgroud)

  • 您没有关闭该文件.[带有`with`的解决方案](http://stackoverflow.com/a/1904455/855050)更好. (13认同)

gho*_*g74 17

fline=open("myfile").readline().rstrip()
Run Code Online (Sandbox Code Playgroud)

  • -1; 这不会关闭文件,如果第一行包含除换行符本身之外的任何尾随空格,则返回不正确的结果. (4认同)

Jar*_*die 9

这应该这样做:

f = open('myfile.txt')
first = f.readline()
Run Code Online (Sandbox Code Playgroud)


dan*_*gph 9

要返回打开文件的开头然后返回第一行,请执行以下操作:

my_file.seek(0)
first_line = my_file.readline()
Run Code Online (Sandbox Code Playgroud)


hoj*_*oju 7

first_line = next(open(filename))
Run Code Online (Sandbox Code Playgroud)

  • 这也会关闭文件吗? (2认同)

Pet*_*sen 6

这里有很多其他答案,但要准确回答你提出的问题(在@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]
Run Code Online (Sandbox Code Playgroud)

换句话说,如果你已经读过文件(如你所说),并且在内存中有一大块数据,那么为了有效地从中获取第一行,请在换行符上执行split(), only,并从结果列表中获取第一个元素.

请注意,这不包括\n行尾的字符,但我假设您仍然不想要它(并且单行文件甚至可能没有).另请注意,尽管它非常简短快速,但它确实会复制数据,因此对于非常大的内存块,您可能不会认为它"高效".一如既往,这取决于......

  • 如果这是一个大文件,f.read()将尝试将整个文件加载到内存中,这不是一个好主意.另一种方法是一次读取一个字符,直到遇到换行符或EOF (8认同)
  • 我不相信我改变了意思.在"读取"整个文件后,询问如何从文件中"读取"第一行是没有意义的.因此,对我来说很明显,提问者的意图是*不*假设必须首先调用`.read()`. (2认同)
  • @thang,真的,我们在浪费每个人还在阅读的时间。你投了反对票,这就是你真正需要做的。至于“以任何一种方式解释”,是的,它可能是,这就是为什么我提供一个选择一种有效解释的答案并没有错,即使它不太可能是最好的解释。最后,是的,如果由于其他原因已读入所有数据,但您仍然只想要第一行(并且您是一名新手程序员),您可能会问这个问题并发现我的回答很有帮助。请放手吧……没有人会被它弄糊涂。 (2认同)