只读取文件的第一行?
这应做到:
f = open('myfile.txt')
first = f.readline()
infile = open('filename.txt', 'r')
firstLine = infile.readline()
你没有关闭文件。 [用'with'解决方案](http://stackoverflow.com/a/1904455/855050)更好。 – becko 2015-12-21 18:43:19
使用.readline()
方法(Python 2 docs,Python 3 docs):
with open('myfile.txt') as f:
first_line = f.readline()
一些注意事项:
- 如文档指出,除非它是唯一的在文件中,从
f.readline()
返回的字符串将包含尾随的换行符。您可能希望使用f.readline().strip()
替代删除换行符。 - 当块结束时,
with
语句会自动再次关闭该文件。 - 的
with
语句只在Python 2.5及以上,并在Python 2.5,你需要使用from __future__ import with_statement
- 在Python 3,你应该指定你打开该文件的文件编码。 Read more...
在Python 3中,如果文件是ascii或utf8,则不必指定文件编码。如果不是,你应该在Python 2中将编码指定为codecs.open。 – Evpok 2012-07-19 12:15:02
@Evpok *“在Python 3中,如果文件是ascii或utf8,则不必指定文件编码”* - 如果这只是严格正确的!现实情况稍微凌乱;如文档中所述,所使用的默认编码是依赖于平台的(甚至可能在同一台计算机上有所不同,具体取决于您如何启动Python - 例如,我已经看到通过假设UTF-8稍后爆发当用'mod_wsgi'通过Apache运行时)。 – 2016-10-23 22:49:28
fline=open("myfile").readline().rstrip()
我来这里寻找这个。特别是因为'rstrip()'删除了换行符。 – 2014-10-27 09:19:59
-1;这不会关闭文件,并且如果第一行包含除换行符本身之外的任何尾随空格,则会返回不正确的结果。 – 2016-10-23 22:51:35
@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
字符,但我假设您不想要它(并且单行文件甚至可能没有)。还要注意,尽管它非常短暂且快速,但它确实复制了数据,因此对于非常大的内存块,您可能不会认为它是“高效的”。与往常一样,这取决于...
如果这是一个大文件,f.read()会尝试将整个文件加载到内存中,这不是一个好主意。另一种方法是一次读取一个字符,直到遇到换行符或EOF为止 – randomThought 2009-12-15 03:04:57
实际上,所有其他答案都是比这更好的替代方案。通常使用readline()和朋友阅读文件一次将加载整个块,也许32K给予或带走,并通过搜索找到下一个换行符。更快,更高效。我的回答只有在他已经*加载整个事情的时候才会有用,在这种情况下,我们可以假设他将所有内容全部放在了一起可以。 – 2009-12-15 03:23:51
我不相信我改变了意思。在“读取”整个文件之后,如何从文件中“读取”第一行是没有意义的。因此,对我来说很明显,提问者的意图不是假设必须首先调用'.read()'。 – 2016-10-17 20:18:34
要返回一个打开的文件的开头,这样做:
my_file.seek(0)
只是为了更好的理解,这将是“my_file.seek(0) line = my_file.readline()” – 2016-09-04 14:59:43
f1 = open("input1.txt", "r")
print(f1.readline())
五年内有多个答案,包含*正是这种方法*。你什么都不做,只是增加另一个而产生噪音。 – 2015-07-05 14:44:36
如果您已经阅读文件(“阅读后在一个文件中“),你已经阅读了第一行! (假设至少有一行) – 2009-12-15 02:50:50
请注意,现在的问题*与原来的含义不同。现在有些答案看起来很愚蠢,因为他们考虑到“阅读文件后”部分(已被删除)。 – 2016-08-03 12:42:23