python初心者(python3.5)です。CGIの勉強をしていましてwavファイルの読み込みの方法がどうしてもわかりません。どなたかpythonに詳しい方、ご教示をお願いいたします。
例えば、wavファイルを選択して、そのwavファイルの長さを返したい場合、以下のようにコードを書いたのですが、
実装中に以下のエラーメッセージが発生しました。
##発生している問題・エラーメッセージ
A problem occurred in a Python script. Here is the sequence of function calls leading up to the error, in the order they occurred. /Users/rieko/rieko_data/cgi-bin/test1.py in () 22 form = cgi.FieldStorage() 23 wf = form['file'] => 24 length = float(wf.getnframes()) / wf.getframerate() 25 content = length 26 length undefined, builtin float = <class 'float'>, wf = FieldStorage('file', 'call.WAV', b'RIFF$>u\x01WA...x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), wf.getnframes undefined, wf.getframerate undefined /Users/rieko/.pyenv/versions/3.5.3/lib/python3.5/cgi.py in __getattr__(self=FieldStorage('file', 'call.WAV', b'RIFF$>u\x01WA...x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'), name='getnframes') 583 def __getattr__(self, name): 584 if name != 'value': => 585 raise AttributeError(name) 586 if self.file: 587 self.file.seek(0) builtin AttributeError = <class 'AttributeError'>, name = 'getnframes' AttributeError: getnframes args = ('getnframes',) with_traceback = <built-in method with_traceback of AttributeError object>
###該当のソースコード
python
1 2import wave 3from pylab import * 4import sys 5from pydub import AudioSegment 6import cgi 7import cgitb 8 9cgitb.enable() 10 11html_body = u""" 12<html> 13<head> 14<meta http-equiv="content-type"content="text/html\n"></head> 15<body> 16%s 17</body> 18</html>""" 19 20form = cgi.FieldStorage() 21wf = form['file'] 22length = float(wf.getnframes()) / wf.getframerate() # 波形長さ(秒) 23content = length 24 25 26print ("Content-type: text/html;charset=utf-8\n") 27print ((html_body % content)) 28 29 30<<HTMLファイル>> 31 32<html> 33<head> 34<meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> 35<body> 36 <form action="/cgi-bin/test1.py" method="post" enctype="multipart/form-data"> 入力してください。<br /> 必須 : 37 <input type="file" name="file" /> 38 <button>Send the file</button> 39 40 </form> 41</body> 42</html>
###試したこと
###以下のように、textファイルを選択する場合はうまくいきます。
import cgi import sys import cgitb cgitb.enable() html_body = u""" <html> <head> <meta http-equiv="content-type"content="text/html\n"></head> <body> %s </body> </html>""" form=cgi.FieldStorage() fileitem = form["file"] kek =[] if fileitem.file: linecount = 0 while True: line = fileitem.file.readline() kek.append(line) if not line: break linecount = linecount + 1 content = kek print ("Content-type: text/html;charset=utf-8\n") print ((html_body % content))
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
コードタグが少々乱れています。```python<改行>プログラムの中身・・・<改行>```と書いてみてください。
---
まだ乱れてますね。プレビュー画面をよくみて、コード範囲が意図通りに表示されることをご確認ください。
回答2件
あなたの回答
tips
プレビュー