我正在尝试使用with
语法打开文件,同时还要枚举文件的行。
所以我尝试了这个:
with index, open(filename) as enumerate(f):
f.read()...
其中f
与open(filename)
相对应,index
应该enumerate(f)
。所以我希望能够在正文中调用f.read()
,并知道正在处理文件的哪一行。
我确信这可以做到 - 我只是没有正确使用语法。有什么帮助吗?
答案 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语句的执行继续执行 如下:
上下文表达式(with_item中给出的表达式)是 评估以获得上下文管理器。
加载了上下文管理器的
__exit__()
以供日后使用。调用上下文管理器的
__enter__()
方法。- 醇>
如果with语句中包含
target
,则返回值__enter__()
被分配给它。
target
是指为open(filename)
的返回值分配的变量。它不能成为函数调用。
答案 1 :(得分:1)
您似乎将with
语句与for
语句混淆。在
for i, x in enumerate(lst):
i
和x
设置为从enumerate
创建的迭代器获取的值。在
with open(filename) as f:
f
的返回值为open
。
你不能把两者混在一起。您需要使用两个单独的语句:
with open(filename) as f:
for index, line in enumerate(f):