为了账号安全,请及时绑定邮箱和手机立即绑定

只读取特定行

只读取特定行

三国纷争 2019-06-27 17:08:38
只读取特定行我使用for循环来读取文件,但是我只想读取特定的行,比如第26行和第30行。有什么内置的功能来实现这一点吗?谢谢
查看完整描述

3 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

如果要读取的文件很大,并且不希望立即在内存中读取整个文件:

fp = open("file")for i, line in enumerate(fp):
    if i == 25:
        # 26th line
    elif i == 29:
        # 30th line
    elif i > 29:
        breakfp.close()

请注意i == n-1n这条线。


在Python2.6或更高版本中:

with open("file") as fp:
    for i, line in enumerate(fp):
        if i == 25:
            # 26th line
        elif i == 29:
            # 30th line
        elif i > 29:
            break


查看完整回答
反对 回复 2019-06-27
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

一种快速和紧凑的办法可以是:

def picklines(thefile, whatlines):
  return [x for i, x in enumerate(thefile) if i in whatlines]

这将接受任何打开的类似文件的对象。thefile(留待调用方从磁盘文件打开它,还是通过套接字或其他类似文件的流打开)和一组基于零的行索引。whatlines,并返回一个列表,具有较低的内存占用和合理的速度。如果要返回的行数很大,您可能更喜欢生成器:

def yieldlines(thefile, whatlines):
  return (x for i, x in enumerate(thefile) if i in whatlines)

-注意,唯一的区别来自于使用圆角括号,而不是使用圆括号。return语句,分别进行列表理解和生成器表达式。

还请注意,尽管提到了“行”和“文件”,更一般的-他们会努力的任何可迭代的,无论是打开的文件还是任何其他的,返回一个列表(或生成器)的项目,根据他们的累进项目编号。因此,我建议使用更合适的通用名称;-)。


查看完整回答
反对 回复 2019-06-27
  • 3 回答
  • 0 关注
  • 433 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信