对象似乎不是 8 位字符串路径或类似 Python 文件的对象

Posted

技术标签:

【中文标题】对象似乎不是 8 位字符串路径或类似 Python 文件的对象【英文标题】:Object does not appear to be a 8-bit string path or a Python file-like object 【发布时间】:2018-07-06 05:45:05 【问题描述】:

我正在使用 Flask 和 Python 3.5。我想在网站上显示一个 matplotplib 图表。我找到了这个例子https://gist.github.com/wilsaj/862153

由于我使用的是 3.5 版本的 Python,因此我对 StringIO 部分进行了少量修改。

@bp.route("/simple.png")
def simple():
    import datetime
    import io
    import numpy as np
    import random

    from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
    from matplotlib.figure import Figure
    from matplotlib.dates import DateFormatter

    fig=Figure()
    ax=fig.add_subplot(111)
    x=[]
    y=[]
    now=datetime.datetime.now()
    delta=datetime.timedelta(days=1)
    for i in range(10):
        x.append(now)
        now+=delta
        y.append(random.randint(0, 1000))
    ax.plot_date(x, y, '-')
    ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
    fig.autofmt_xdate()
    canvas=FigureCanvas(fig)
    png_output = io.BytesIO()
    png_output_text = np.genfromtxt(png_output, delimiter=",")
    canvas.print_png(png_output_text)
    response=make_response(png_output_text.getvalue())
    response.headers['Content-Type'] = 'image/png'
    return response

我收到的错误:

Traceback (most recent call last):
  File "c:\proofdevelopment\flask\flask\app.py", line 1988, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\proofdevelopment\flask\flask\app.py", line 1641, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\proofdevelopment\flask\flask\app.py", line 1544, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "c:\proofdevelopment\flask\flask\_compat.py", line 33, in reraise
    raise value
  File "c:\proofdevelopment\flask\flask\app.py", line 1639, in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\proofdevelopment\flask\flask\app.py", line 1625, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "C:\ProofDevelopment\flask\examples\flaskr\flaskr\blueprints\flaskr.py", line 107, in simple
    canvas.print_png(png_output_text)
  File "C:\Users\nmartinez\AppData\Local\Continuum\miniconda3\envs\py35\lib\site-packages\matplotlib\backends\backend_agg.py", line 526, in print_png
    self.figure.dpi, metadata=metadata)
TypeError: Object does not appear to be a 8-bit string path or a Python file-like object

我只想运行那个“简单”的例子,但我没能做到:(

【问题讨论】:

请发布包含回溯的整个错误消息。这是必不可少的,因为它会告诉我们是哪一行导致了错误消息。否则,我们必须猜测,我们可能猜对也可能猜错。或者,我们可能会跳过您的问题,然后继续向我们提供有关该问题的更多信息的问题。 Traceback 有很多有用的上下文 这似乎不是整个回溯 png_output_text = np.genfromtxt(png_output, delimiter=",") 是从哪里来的? 来自皮埃尔的回答:***.com/questions/11914472/stringio-in-python3 【参考方案1】:

我不确定您为什么要添加 np.genfromtxt() 电话。以下几行创建内存文件对象就足够了;这些是视图函数中的最后几行,从您的 png_output 行开始:

png_output = io.BytesIO()
canvas.print_png(png_output)
response = make_response(png_output.getvalue())
response.headers['Content-Type'] = 'image/png'
return response

通过这些更改,代码会生成一个图:

【讨论】:

【参考方案2】:
x_train=np.array(list(map(img_preprocess,x_train)))
x_valid=np.array(list(map(img_preprocess,x_valid)))

bit 显示对象-does-not-appear-to-be-a-8-bit-string-path-or-a-python-file-like-object

这个错误是因为在这里你已经通过执行x_train=np.array(list(map(img_preprocess,x_train)))这条线改变了x_train的形状,所以x_train会不时更新,如果你将x_train作为x_train=np.array(list(map(img_preprocess,x_train)))函数的输入,那么它将给出这个错误

解决方案:重置您的 python 内核并再次按顺序运行所有代码。

【讨论】:

【参考方案3】:
x_train=np.array(list(map(img_preprocess,x_train)))
x_valid=np.array(list(map(img_preprocess,x_valid)))
bit shows object-does-not-appear-to-be-a-8-bit-string-path-or-a-python-file-like-object

这背后的问题是什么?

【讨论】:

以上是关于对象似乎不是 8 位字符串路径或类似 Python 文件的对象的主要内容,如果未能解决你的问题,请参考以下文章

TypeError: int() 参数必须是字符串、类似字节的对象或数字,而不是使用 Python 3.7 时的“NoneType”

OSError:[E050] 找不到模型“de”。它似乎不是快捷链接、Python 包或数据目录的有效路径

正则表达式类型错误:预期的字符串或类似字节的对象 Python

需要帮忙!!! OSError:[E050] 找不到模型“en_core_web_trf”。它似乎不是 Python 包或数据目录的有效路径

如何判断 Python 对象是不是为字符串?

TypeError:预期的字符串或类似字节的对象 HashingVectorizer