簡體   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