如何使用python只得到文件的第一行作为字符串?

如果您已经阅读了文件("在阅读了文件之后"),那么您已经阅读了第一行!(假设至少有一行。)

请注意,现在所说的问题与原来的含义不同。有些答案现在看起来很愚蠢,因为他们考虑到了"在文件中阅读后"部分(已删除)。

使用.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和更高版本中有效,而在python2.5中,您需要使用from __future__ import with_statement。

在python 3中,您应该为打开的文件指定文件编码。多读…

在python 3中,如果文件是ascii或utf8,则不必指定文件编码。如果不是这样,您应该指定codecs.open在python 2中的编码。

@evpok"在python 3中,如果文件是ascii或utf8,则不必指定文件编码"-如果这只是严格正确的话!实际情况稍显混乱;如docs中所述,所使用的默认编码依赖于平台(甚至在同一台计算机上也可能不同,这取决于您如何启动python——例如,我看到了在我的正常shell中工作的代码,假设在使用mod_wsgi运行apache时,utf-8随后会爆炸。

infile = open('filename.txt', 'r')

firstLine = infile.readline()

您没有关闭文件。使用with的解决方案更好。

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

我是来找这个的。尤其是因为rstrip()删除了换行符。

-1;这不会关闭文件,如果第一行除了换行符本身之外还包含任何尾随空格,则返回错误的结果。

@markamery:实际上,因为文件句柄没有分配给变量,所以它会立即被垃圾收集,从而关闭文件。(当然,使用上下文管理器的公认解决方案仍然更好。)

@acdr您所说的对于cpython是正确的,但对于其他的python实现则不是正确的-请参见pypy垃圾收集文档,其中提到"文件…如果超出范围,则不会立即关闭。出于这个原因,人们通常认为(例如在stackoverflow.com/a/7396043/1709587上),依赖你描述的行为是不好的做法。

应该这样做:

f = open('myfile.txt')

first = f.readline()

first_line = next(open(filename))

这也会关闭文件吗?

最后,当python离开块时。

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

my_file.seek(0)

first_line = my_file.readline()

为了更好地理解,它将是"my_file.seek(0)line=my_file.readline()"

这里还有很多其他答案,但要准确回答您提出的问题(在@markamery去编辑原始问题并改变其含义之前):

>>> f = open('myfile.txt')

>>> data = f.read()

>>> # I'm assuming you had the above before asking the question

>>> first_line = data.split('

', 1)[0]

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

注意,这不包括行尾的字符,但我假设您无论如何都不想要它(而且一个单行文件甚至可能没有一个)。另外请注意,虽然它非常短和快速,但它确实会复制数据,因此对于一个真正大的内存块,您可能不认为它是"高效的"。一如既往,这取决于…

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

实际上,所有其他的答案都是更好的选择。通常,使用readline()和朋友读取一个文件时,会一次加载整个块,可能是32K的give或take,然后搜索该块以查找下一个换行符。更快更高效。我的答案只有在他已经加载了全部内容的情况下才有用,在这种情况下,我们可以假设他对所有内容都在内存中是满意的。

我不相信我改变了意思。在"读取"整个文件之后,询问如何"读取"文件的第一行是毫无意义的。因此,对我来说,很明显,询问者的意图不是假定必须首先调用.read()。

@Markamery,这个问题的措词很差("相当没有意义"),所以你猜到了它的意图("对我来说很明显"),然后重新修改它来匹配。我的解释不同。很明显,在Harpals澄清之前,除非他澄清,否则我们只有原始措辞加上他接受了一个答案(即"seek(0)"),这对我来说清楚地表明他已经阅读了文件,至少超过了第一行。

你应该删除这个答案。这不是正确的方法,而且可以欺骗人们。

@谢谢你的意见,但最初的问题是这样写的:我的回答是一个技术上有效的回答,而且是一个旨在帮助描述的情况的回答。我确实更新了它,表明这个问题被编辑了,措辞也改变了,我认为我的澄清有助于防止任何人"欺骗"。

:)好吧,我是个懒惰的程序员。我在网上查找了代码,然后匆忙使用它来尝试运行一些东西来进行演示。出于某种原因,我的代码非常慢!花了一段时间才发现,这东西是加载到内存4GB,然后才采取第一行!Tor的答案实际上是"正确的"答案。做事情的方法很多。有些更好。有些更糟。这是一个糟糕的结局。把它放在最上面而不是Tor的答案,这让我很困扰。我以为因为它在上面,所以最好,所以我没有检查…废话。我想大部分是我的懒惰。

顺便问一下,问题是"只读取文件的第一行?",而不是"如何读取整个文件并获取第一行?"

@唐,不,你错了。当我回答时,问题是"在读取一个文件之后,如何告诉python只读取第一行?"我认为这意味着这个家伙已经阅读了整个文件内容,想知道如何提取第一行。自从这个问题被编辑后,我就非常清楚了。

我认为你把这个问题解释错了。"只读取第一行"……不是"只取第一行",它可以用任何一种方式解释。我仍然认为应该放弃这个答案的排名。你能想到一个场景,你想用这个来代替托尔的答案吗?

@唐卡,真的,我们在浪费所有还在读书的人的时间。你投了反对票,这就是你真正需要做的。至于"任何一种解释方式",是的,它可能是,这就是为什么我在提供一个选择一个有效解释的答案时没有错,即使它不可能是最好的解释。最后,是的,如果所有的数据都是由于其他原因被读取的,但是您仍然只需要第一行(并且您是一个新手程序员),那么您可能会问这个问题,并发现我的答案很有帮助。请就这样吧…没有人会被它迷惑。

解决方案1:

with open('input_file.txt') as input_file:

lines=input_file.readlines()

for line_no, line in enumerate(lines):

if line_no == 0:

print(line)

break

lines包含来自input_file.txt的所有行。

line_no将给出文件中的行号。

如果line_no为0,第一行将作为索引打印。从0开始

同样,如果你想要第二行,你可以写if line_no==1。

解决方案2:

with open('input_file.txt') as input_file:

lines=input_file.readlines()

first_line=lines[0]

print(first_line)

lines[0]是第一行。

同样,lines[1]是第二行

解决方案3:

打印第一行N行。用任何数字替换N。如果你想要第一行,那么n=1

from itertools import islice

with open('my_file.txt','r') as my_file:

head = list(islice(my_file, N))

print(head)

这是unix命令head的等效代码。

解决方案4:

with open('input.txt', 'r') as fin:

head, tail = fin.read().split('

', 1)

print(head)

#print(tail)

f1 = open("input1.txt","r")

print(f1.readline())

在五年多的时间里,有很多答案都包含着这种方法。你什么都没做,只是通过添加另一个来制造噪音。

python只读打开文件_关于python:只读文件的第一行?相关推荐

  1. python关闭对象语法_用Python打开和关闭文件

    到目前为止,您一直在读取和写入标准输入和输出.现在,我们将看到如何使用实际数据文件. Python提供了默认情况下处理文件所必需的基本功能和方法.您可以使用文件对象执行大多数文件操作. open函数 ...

  2. python代码打开可执行文件_将自己的Python代码打包成exe文件(更换设备可运行的)...

    1.这里使用到的第三方库是 pyinstaller,先安装该库 pip install pyinstaller 2.将python文件copy到python的安装目录下的Scripts目录下 3.打开 ...

  3. python如何打开npy文件_操作python实现npy格式文件转换为txt文件

    如下代码会将npy的格式数据读出,并且输出来到控制台:import numpy as np ##设置全部数据,不输出省略号 import sys np.set_printoptions(thresho ...

  4. python with打开多个文件_在python中使用with打开多个文件的方法

    python 用循环创建多个文件 请教- 小编想用python创建多个.tex的文件并把他们转换成pdf最终再打包成小编要在爱你的这条路上压抑住所有思念等你来爱小编. Python编程中用for()循 ...

  5. python通过内置的什么函数打开一个文件_利用python进行文件操作

    这篇文章主要介绍了如何利用python进行文件操作,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下 什么是文件 文件是系统存储区域的一个命名位置,用来存储一些信息,便于后续访问.能够在非 ...

  6. python 打开pdf文件_用Python开发的简易PDF阅读器

    主要的库 PyQt5:UI的开发 fitz:与pdf文件相关的操作几乎都用的是它 这是一个用Python开发的pdf阅读器,是软A项目的附加软件(虽然现在主程序几乎可以说还没有开始:joy:,只完成了 ...

  7. c++读取utf8文件_【Python】File文件对象

    open()方法 Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError. 注意:使用 open() ...

  8. 关于python文件_关于python文件操作

    python中对文件.文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块. 得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 返回指定目录下的所有文件和目 ...

  9. python代码写入方式_【Python 1-17】Python手把手教程之——文件的读写以及I/O操作...

    作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) 从文件中读取数据 文本文件可存储的数据量很多,每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其 如 ...

最新文章

  1. gazebo入门_【ROS-Gazebo】仿真插件编写教程(1)——概述
  2. 越来越多BCH全节点客户端对BCH意味着什么?
  3. 如何在R中正确使用列表?
  4. rest-framework 视图
  5. 如何在Windows中快速轻松地将文件发送到SkyDrive
  6. 判断点是否在三角形内
  7. Python中fastapi构建的web项目使用.gitlab-ci.yml文件在KubeSphere中进行自动部署
  8. 【HackerRank】Cut the tree
  9. 疫情下,裁员补偿标准不可不知
  10. Stream.min
  11. React Native入门——布局实践:开发京东客户端首页
  12. 好好讲一讲:到底什么是Java架构师(含福利放送)
  13. mysql gh 划线,gh-ost:在线DDL修改MySQL表结构工具
  14. php数组函数array flip,PHP array_flip() 函数
  15. C语言图书管理系统[2023-01-06]
  16. 使用Python的psutil包获取机器IPv4信息
  17. [精简]托福核心词汇100
  18. android蓝牙门禁,BleAgent蓝牙门禁SDK文档
  19. R6030- CRT not initialized
  20. 超市信息管理系统的测试用例

热门文章

  1. linux版_百度输入法Linux版发布 | 欧侃在线“统一源”提供直接安装
  2. ios Mac下的SVN工具:Cornerstone与Versions和使用subversion管理iOS源代码
  3. JS 判断客户端环境(以及如何区分QQ客户端和QQ浏览器)
  4. 按条件隐藏bootstrapTable某一列
  5. 宇宙最强vscode教程
  6. angularjs pdf插件_AngularJS权威教程 PDF扫描版[14MB]
  7. 使用setoolkit制作简单钓鱼网站
  8. oss :Request has expired.
  9. MATLAB/simulink学习笔记(二)——对正弦函数判断的正负以及分段函数仿真
  10. OPPO Java后端校招提前批面试