我收到此错误:
Traceback (most recent call last):
File "so.py", line 7, in <module>
for review in x:
ValueError: I/O operation on closed file.
代码:
def get_reviews(path):
with open(path, 'r', encoding = "utf-8") as file1:
reviews = map(lambda x: x.strip().split(','), file1)
return reviews
x = get_reviews("reviews.csv")
for review in x:
print(review)
答案 0 :(得分:1)
在Python 3中,all :: (a->Bool) -> [a] -> Bool
│ │
(`elem`alpha) :: Char->Bool │
ys :: String
函数不完全处理输入对象,而仅仅返回迭代器。因此,在map()
循环调用每一行之前,文件实际上不会被处理。但到那时,该文件已关闭,因为您的代码已离开for
块。
这里有两个选择。首先,您可以让调用者在打开的文件中传递,并让他们处理打开和关闭文件:
with
或者让def get_reviews(rev_file):
return map(lambda x: x.strip().split(','), rev_file)
with open(path) as file1:
for review in get_reviews(file1):
print(review)
完全处理文件,比如返回一个列表。
get_reviews()
答案 1 :(得分:0)
reviews = map(lambda x: x.strip().split(','),
[_ for _ in file1] )
你在文件对象上返回了一个生成器。当您在函数中离开with
块时,该文件已关闭。