无法返回从文件中读取的列表(.csv)

时间:2016-09-28 09:37:57

标签: python csv

我一直在学习和练习python,在此期间 我在程序中发现了一个错误,但我无法解决。我想返回从csv文件中检索到的列表。我尝试了下面的代码,它返回一个错误。

import csv

def returnTheRowsInTheFile(fileName):
    READ = 'r'
    listOfRows = []
    try:
        with open(fileName, READ) as myFile:
            listOfRows = csv.reader(myFile)
            return listOfRows
    except FileNotFoundError:
        print('The file ' +  fileName + ' is not found')
    except: 
        print('Something went wrong')
    finally:
        #myFile.close()
        print()

def main():
    fullString = returnTheRowsInTheFile('ABBREVATIONS.CSV') 
    for eachRow in fullString:
        print(eachRow)
    return

main()

错误是

  

Traceback(最近一次调用最后一次):文件   “C:\ Users \ santo \ workspace \ PyProject \ hello \ FinalChallenge.py”,第36行,   在       main()文件“C:\ Users \ santo \ workspace \ PyProject \ hello \ FinalChallenge.py”,第32行,   在主要       对于fullString中的everyRow:ValueError:关闭文件的I / O操作。

3 个答案:

答案 0 :(得分:1)

解决此问题的简单方法是从函数返回列表。我知道您已分配listOfRows = [],但当您执行listOfRows = csv.reader(myFile)时,这已被覆盖。

所以,简单的解决方案是:

def returnTheRowsInTheFile(fileName):
    READ = 'r'
    try:
        with open(fileName, READ) as myFile:
            listOfRows = csv.reader(myFile)
        return list(listOfRows) # convert to a list
    except FileNotFoundError:
        print('The file ' +  fileName + ' is not found')
    except: 
        print('Something went wrong')

您还应该阅读pep8这是Python的样式指南;为了理解如何命名变量和函数。

答案 1 :(得分:0)

当您使用shared时,它会在上下文结束时关闭文件。现在with open的返回类型为listOfRows,因此csv.Reader(不是列表)。您正在尝试迭代它,它似乎迭代已经关闭的文件对象。

答案 2 :(得分:0)

正如JulienD已经指出的那样,当你尝试从中读取行时,文件已被关闭。你可以使用它来消除这个异常,例如:

    with open(fileName, READ) as myFile:
        listOfRows = csv.reader(myFile)
        for row in listOfRows:
            yield row

<强>更新

顺便说一下,处理异常的方式使得调试非常困难。我建议这样的事情。

except Exception as e: 
    print('Something went wrong: "%s"' e)

这样您至少可以看到错误消息。