如何在烧瓶中修复“ TypeError:'模块'对象不可调用”?

时间:2019-10-15 17:01:00

标签: python-3.x flask wsgi

我想使用Python创建一个Web服务。 服务内容如下。

  1. 接收用户的音乐文件
  2. 分析收到的文件并创建一个新的音乐文件。 (该功能的实现已使用python库完成。)
  3. 将新创建的音乐文件输出给用户。

主要目的是分析音乐文件并创建一个新文件,为此目的输入和输出音乐文件是第二功能。因此,我不具备创建Web服务的知识,需要帮助来实现此功能。我上网并在一定程度上实现了它,但是却出现了一个我不知道为什么的错误。

我上传了app.py和 init .py的代码。我还上传了目录的结构。似乎需要修复一些问题才能使用控制器内部的功能。我已经在互联网和YouTube上搜索了十二个多小时,但我真的不知道。我在控制器目录中创建了一个名为NoteConvertor和MarcovMatrix的类。

它一直运行到我转到http://127.0.0.1:5000/并收到文件为止。然后出现以下错误:

wav_transform中的文件“ C:\ Users \ K \ git \ flask \ gp \ app.py”,第24行

sr,数据= scipy.io.wavfile('static / file1.wav')

TypeError:“模块”对象不可调用

-gp
|----controller
|        MarcovMatrix.py
|        MatrixBuilder.py
|        NoteConvertor.py
|----static
|        style.css
|----templates
|        index.html
|        upload.html
|        wavplay.html
|----__init__.py
|----app.py


app.py

import flask
from flask import Flask, request, render_template
from werkzeug.utils import secure_filename
import scipy
import numpy as np
from scipy import misc
import pysynth as ps      
from scipy.io import wavfile  

app = Flask(__name__)


@app.route('/')
@app.route("/upload")
def index():
    return render_template('index.html')

@app.route('/uploader', methods=['GET', 'POST'])
def wav_transform():
    if request.method == 'POST':
        f = request.files['file']
        f.save(f'static/file1.wav')
        sr, data = scipy.io.wavfile('static/file1.wav')

        empty_notes = controller.NoteConvertor(data)
        notes = empty_notes.convertor()
        song = sum(notes, [])

        matrix = controller.MarcovMatrix(song)
        start_note = ['e4', 4]

        random_song = []
        for i in range(0, 100):
                start_note = matrix.next_note(start_note)
                random_song.append(start_note)

        ps.make_wav(random_song, fn='static/random.wav')

        return render_template('wavplay.html')


if __name__ == '__main__':
    app.run(debug = True)


__init__.py
from gp.controller import MarcovMatrix
from gp.controller import MatrixBuilder
from gp.controller import NoteConvertor

我想告诉您如何使用烧瓶内以python(在控制器内部)编写的函数。

如果您想知道如何做我想实现的目标,我将不胜感激。请理解这个问题,因为学习网络基础不是我的主要目标。

1 个答案:

答案 0 :(得分:0)

这是一个导入问题。您可以选择

import scipy
...
sr, data = scipy.io.wavfile('static/file1.wav')

from scipy.io import wavfile
...
sr, data = wavfile('static/file1.wav')