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

时间:2014-10-09 23:38:42

标签: python python-2.7

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

所以我尝试了这个:

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

其中fopen(filename)相对应,index应该enumerate(f)。所以我希望能够在正文中调用f.read(),并知道正在处理文件的哪一行。

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

2 个答案:

答案 0 :(得分:3)

我认为,与你正在尝试的有效Python最接近的是:

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

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

您无法将enumerate来电与with语句合并,因为language's grammar just doesn't allow it

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

带有一个“item”的with语句的执行继续执行   如下:

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

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

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

  6.   
  7. 如果with语句中包含target,则返回值   __enter__()被分配给它。

  8.   

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

答案 1 :(得分:1)

您似乎将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):