ValueError:关闭(csv)文件的I / O操作

时间:2018-05-04 16:20:28

标签: python python-3.x

我收到此错误:

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)

2 个答案:

答案 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块时,该文件已关闭。