繁体   English   中英

使用索引,打开(文件)作为枚举(文件指针)

[英]With index, open(file) as enumerate(filepointer)

我正在尝试使用with语法打开文件with同时还要枚举文件的行。

所以我尝试了这个:

with index, open(filename) as enumerate(f):
    f.read()...

其中f表示对应于open(filename) ,而index应该采用enumerate(f) 因此,我希望能够在主体中调用f.read() ,并知道文件的哪一行正在处理。

我敢肯定这是可以做到的-我只是没有正确使用语法。 有什么帮助吗?

我认为最有效的Python与您尝试的最接近的是:

with open(filename) as f:
    for index, line in enumerate(f):
        # Do stuff with each line.

f.read()读取f的全部内容并将其存储在字符串中,因此您将无法以这种方式获取行号。

您不能将enumerate调用与with语句结合使用with因为该语言的语法不允许这样做

 with_stmt ::= "with" with_item ("," with_item)* ":" suite with_item ::= expression ["as" target] 

用一个“项目”执行with语句的过程如下:

  1. 计算上下文表达式(with_item中给出的表达式)以获得上下文管理器。

  2. 上下文管理器的__exit__()已加载以供以后使用。

  3. 上下文管理器的__enter__()方法被调用。

  4. 如果with语句中包含target ,则将__enter__()的返回值分配给它。

target是要为open(filename)的返回值分配的变量。 不能是函数调用。

您似乎将with语句与for语句混淆了。

for i, x in enumerate(lst):

ix设置为从enumerate创建的迭代器获得的值。

with open(filename) as f:

f分配了open的返回值。

您不能将两者混在一起。 您需要使用两个单独的语句:

with open(filename) as f:
    for index, line in enumerate(f):

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM