AttributeError: у объекта '_io.TextIOWrapper' нет атрибута 'nameofColumn', доступного для данных - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть большой файл, который содержит таблицу.Я собираюсь открыть его с пакетом datatable в python.Рассмотрим следующий код

import datatable as dt
from datatable import f
df = dt.open('Mybigfile.nff')
df = df[(f.c1 > 0) & (f.c1 < 100),:]
print(df.shape)

, когда я запускаю его как python code.py, где code.py содержит приведенный выше код, все в порядке.

Но когда я помещаю код во флакон-API, я получаю ошибку

AttributeError: '_io.TextIOWrapper' object has no attribute 'c1'

from flask import Flask, request
from flask_restful import Resource, Api
from flask_cors import CORS
from json import dumps
import datatable as dt
from datatable import f

app = Flask(__name__)
CORS(app)
api = Api(app) 

class test(Resource):
    def get(self):
        df = dt.open('Mybigfile.nff')
        df = df[(f.c1 > 0) & (f.c1 < 100),:]
        print(df.shape)
        return 1

api.add_resource(test, '/gettest')
if __name__ == '__main__':
    app.run(host= '0.0.0.0',port=12345)

1 Ответ

0 голосов
/ 24 декабря 2018

Кажется, ошибка исходит из выражения (f.c1 > 0).По какой-то причине (и я не знаю, как это происходит), ваша переменная f - это не объект, импортированный из datatable, а скорее объект класса _io.TextIOWrapper.

Проблема может бытьразрешается, однако, одним из следующих способов:

  1. Импорт f под другим именем, например from datatable import f as F.Затем вы напишите df[(F.c1 > 0) & (F.c1 < 100), :].

  2. Используйте f непосредственно из пространства имен dt: df[(dt.f.c1 > 0) & (dt.f.c1 < 100), :].

Наконец, вы можете попытаться выяснить, как f стал TextIOWrapper в первую очередь.Возможно, где-то есть фрагмент кода, который читает with open(...) as f: ....Когда этот кусок исполняется, f становится переопределенным.

...