Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用librosa下载并打开文件,无需写入文件系统_Python_Heroku_Flask_Librosa - Fatal编程技术网

Python 使用librosa下载并打开文件,无需写入文件系统

Python 使用librosa下载并打开文件,无需写入文件系统,python,heroku,flask,librosa,Python,Heroku,Flask,Librosa,我知道Heroku dynos是短暂的,不能在请求之间存储文件。我有一个Flask应用程序,它应该从Spotify获得一个MP3,将其传递给LibROSA进行分析,然后返回一个可视化结果 我有一个脚本,可以在本地使用urllib.urlopen下载文件,将其保存到一个文件中,然后使用librosa.load加载该文件。但是,我似乎无法从Heroku上的文件系统加载该文件。当我不控制文件系统时,如何加载下载的文件 song_url = "https://p.scdn.co/mp3-preview/

我知道Heroku dynos是短暂的,不能在请求之间存储文件。我有一个Flask应用程序,它应该从Spotify获得一个MP3,将其传递给LibROSA进行分析,然后返回一个可视化结果

我有一个脚本,可以在本地使用
urllib.urlopen
下载文件,将其保存到一个文件中,然后使用
librosa.load
加载该文件。但是,我似乎无法从Heroku上的文件系统加载该文件。当我不控制文件系统时,如何加载下载的文件

song_url = "https://p.scdn.co/mp3-preview/8e29d103eba74b5cef8600722fff3c491e37fc9a.mp3"
sample_30s = urlopen(song_url)
mp3_path = os.path.join(os.path.dirname(__file__), 'static/data/temp.mp3')

output = open(mp3_path, 'wb')
output.write(sample_30s.read())

y, sr = librosa.load(mp3_filepath)
可以将对象作为文件路径的替代。该对象以类似文件的方式返回。它可以直接传递给librosa

从urllib.request导入urlopen
进口藏红花
以urlopen(song_url)作为响应:
y、 sr=librosa.load(响应)
但是,librosa只支持从文件系统加载MP3文件。您可以查看具有的类文件对象支持哪些格式。获取不同格式的文件,或使用库(如)将其转换为WAV

导入io
从urllib.request导入urlopen
进口藏红花
导入pydub
wav=io.BytesIO()
以urlopen(mp3_url)作为r:
r、 seek=lambda*args:None#允许pydub调用seek(0)
pydub.AudioSegment.from_文件(r).export(wav,“wav”)
波搜索(0)
y、 sr=librosa.load(wav)