Nano Hash - криптовалюты, майнинг, программирование

Невозможно вернуть список, прочитанный из файла (.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()

И ошибка

Трассировка (последний последний вызов): Файл "C:\Users\santo\workspace\PyProject\hello\FinalChallenge.py", строка 36, в main() Файл "C:\Users\santo\workspace\PyProject\hello\ FinalChallenge.py", строка 32, в main для каждой строки в fullString: ValueError: операция ввода-вывода в закрытом файле.

28.09.2016

Ответы:


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; чтобы понять, как называть ваши переменные и функции.

28.09.2016

2

Когда вы используете with open, он закрывает файл, когда контекст заканчивается. Теперь listOfRows имеет возвращаемый тип csv.Reader, а затем fullString (не список). Вы пытаетесь выполнить итерацию по нему, который, кажется, выполняет итерацию по файловому объекту, который уже закрыт.

28.09.2016

3

Как уже указывал 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)

Таким образом, вы, по крайней мере, сможете увидеть сообщение об ошибке.

28.09.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..