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

2024-10-02 02:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在学习和练习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 (most recent call last): File "C:\Users\santo\workspace\PyProject\hello\FinalChallenge.py", line 36, in main() File "C:\Users\santo\workspace\PyProject\hello\FinalChallenge.py", line 32, in main for eachRow in fullString: ValueError: I/O operation on closed file.


Tags: csvinreadreturnmaindef错误filename
3条回答

解决这个问题的简单方法是从函数返回一个列表。我知道您分配了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的样式指南;以了解如何命名变量和函数

正如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)

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

当您使用with open时,它会在上下文结束时关闭文件。现在listOfRows是返回类型csv.Reader,然后是fullString(不是列表)。您正在尝试对其进行迭代,这似乎是对已关闭的文件对象进行迭代

相关问题 更多 >

    热门问题