2014-10-09 74 views
0

我試圖打開一個文件使用with語法,同時也枚舉文件的行。使用索引,打開(文件)作爲枚舉(文件指針)

所以,我想這一點:

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

f意味着對應open(filename),並index應採取enumerate(f)。所以我希望能夠在正文中調用f.read(),並知道正在處理文件的哪一行。

我確信這可以完成 - 我只是沒有正確地使用語法。任何幫助?

回答

3

我認爲這是合法的Python到你想這是什麼最接近的事:

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

f.read()讀取f字符串中的全部內容,並將其存儲,所以你不能就能夠以這種方式獲得線路號碼。

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

的with語句用一個「項目」收益爲 執行如下:

您不能enumerate呼叫與with聲明,因爲language's grammar just doesn't allow it結合

  1. 上下文表達式(在with_item中給出的表達式)是 求值以獲得上下文管理器。

  2. 上下文管理器的__exit__()被加載供以後使用。

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

  4. 如果target被列入with語句,從 __enter__()返回值分配給它。

target意味着是一個變量,它的open(filename)返回值被分配給。它不能是一個函數調用。

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):