Python 是否仅读取文件的第一行?

Python 是否仅读取文件的第一行?,python,file,Python,File,如何使用Python仅将文件的第一行作为字符串获取?应该这样做: f = open('myfile.txt') first = f.readline() 使用.readline()方法(,): 一些注意事项: 如文档中所述,除非它是文件中的唯一一行,否则从f.readline()返回的字符串将包含一个尾随的换行符。您可能希望使用f.readline().strip()来删除换行符 当块结束时,with语句会自动再次关闭文件 with语句仅在Python2.5及更高版本中有效,在Python2.

如何使用Python仅将文件的第一行作为字符串获取?

应该这样做:

f = open('myfile.txt')
first = f.readline()
使用
.readline()
方法(,):

一些注意事项:

  • 如文档中所述,除非它是文件中的唯一一行,否则从
    f.readline()
    返回的字符串将包含一个尾随的换行符。您可能希望使用
    f.readline().strip()
    来删除换行符
  • 当块结束时,
    with
    语句会自动再次关闭文件
  • with
    语句仅在Python2.5及更高版本中有效,在Python2.5中,您需要使用
    from\uuuuuuuuuuuuuuuu\uuuuuu导入with\u语句
  • 在Python3中,应该为打开的文件指定文件编码
    这里有很多其他答案,但要准确回答您提出的问题(在@MarkAmery编辑原始问题并更改其含义之前):

    换句话说,如果您已经读取了文件(如您所说),并且内存中有一大块数据,那么为了高效地从中获取第一行,只需对换行符执行一次split(),并从结果列表中获取第一个元素


    请注意,这不包括行尾的
    \n
    字符,但我假设您无论如何都不想要它(并且一个单行文件甚至可能没有)。还要注意的是,虽然它很短而且很快,但是它确实复制了数据,所以对于一个非常大的内存块,你可能不认为它是“高效的”。一如既往,这取决于…

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

    my_file.seek(0)
    first_line = my_file.readline()
    

    如果您已经阅读了文件(“读入文件后”),那么您已经阅读了第一行!(假设至少有一行)请注意,现在使用的问题的含义与最初的不同。现在有些答案看起来很傻,因为它们考虑了“读入文件后”部分(已删除)。如果这是一个大文件,f.read()将尝试将整个文件加载到内存中,这不是一个好主意。另一种方法是一次读取一个字符,直到遇到换行符或EOF。实际上,所有其他答案都是更好的选择。通常,使用readline()和friends读取文件时,会一次加载整个块,可能是32K大小,然后通过搜索来查找下一个换行符。速度更快,效率更高。我的回答只有在他已经加载了整个东西的情况下才有用,在这种情况下,我们可以假设他可以把它全部存储在内存中。我不相信我改变了它的意思。在“读取”整个文件之后,询问如何“读取”文件的第一行是毫无意义的。因此,对我来说很明显,提问者的意图并不是假设必须首先调用
    .read()
    。@MarkAmery,这个问题的措辞很糟糕(“很无意义”),所以你猜测了意图(“对我来说很明显”),并重新编写了它以匹配。我的解释不同。显然,除非哈帕尔斯澄清,否则我们只有原始措辞加上他接受的答案(即“seek(0)”),我认为这清楚地表明他已经阅读了文件,至少超过了第一行。@thang,真的,我们在浪费每个人仍在阅读的时间。你投了反对票,这就是你真正需要做的。至于“以任何一种方式解释”,是的,它可能是,这就是为什么我提供的答案选择了一种有效的解释,即使它不可能是最好的解释,也没有错。最后,是的,如果由于其他原因读取了所有数据,但您仍然只需要第一行(而且您是一名新手程序员),那么您可能会问这个问题,并发现我的回答很有帮助。请就这样吧。。。在Python3中,如果文件是ascii或utf8,则不必指定文件编码。如果不是,您应该指定codecs.open在Python 2中的编码。@Evpok“在Python 3中,如果文件是ascii或utf8,您不必指定文件编码”-如果这是严格正确的话!现实稍微有些混乱;如文档中所述,所使用的默认编码取决于平台(甚至在同一台计算机上也可能有所不同,具体取决于您启动Python的方式-例如,我已经看到在我的正常shell中工作的代码,假设UTF-8在使用
    mod_wsgi
    运行Apache时会爆炸。我想读5行左右,我怎么能?我是来找这个的。尤其是因为
    rstrip()
    删除了换行符;这不会关闭文件,如果第一行包含除换行符本身以外的任何尾随空格,则返回不正确的结果。@MarkAmery:实际上,由于文件句柄未分配给变量,因此会立即对其进行垃圾收集,从而关闭文件。(当然,使用上下文管理器的公认解决方案要好得多。)@acdr您所说的适用于CPython,但不适用于其他Python实现——例如,请参阅,其中特别提到“文件……在超出范围时不会立即关闭”。出于这个原因,人们通常认为(例如at)依赖于你描述的行为是不好的做法。五年前有多个答案正好包含了这种方法。除了通过添加另一个噪声来创建噪声外,您什么也不做。您没有关闭文件。更好。只是为了更好地理解,应该是“my_file.seek(0)line=my_file.readline()”这是否也会关闭文件?最终,当Python离开块时。
    with open('myfile.txt') as f:
        first_line = f.readline()
    
    fline=open("myfile").readline().rstrip()
    
    >>> 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]
    
    my_file.seek(0)
    first_line = my_file.readline()
    
    first_line = next(open(filename))
    
    f1 = open("input1.txt", "r")
    print(f1.readline())