在Python中编辑类似文件的对象上的MP3元数据?

在Python中编辑类似文件的对象上的MP3元数据?,python,mp3,metadata,id3,Python,Mp3,Metadata,Id3,我们正在用Python动态生成MP3文件,需要使用类似文件的对象在内存中编辑ID3头文件 上的所有ID3库似乎都要求您以字符串形式传递文件系统路径。我觉得这相当令人沮丧 将生成的MP3输出到磁盘(或ramdisk)只是为了添加ID3标记是不可接受的,原因有很多,尤其是性能 考虑到ID3库的丰富内容,是否有一个ID3库可以简单地处理类似文件的对象?AFAIR标记被附加到文件的末尾。您可能想学习格式并自己制作一个简单的库,这应该不是很困难 也可以考虑在TMPFS(RAMDISM)等文件系统上临时存储

我们正在用Python动态生成MP3文件,需要使用类似文件的对象在内存中编辑ID3头文件

上的所有ID3库似乎都要求您以字符串形式传递文件系统路径。我觉得这相当令人沮丧

将生成的MP3输出到磁盘(或ramdisk)只是为了添加ID3标记是不可接受的,原因有很多,尤其是性能


考虑到ID3库的丰富内容,是否有一个ID3库可以简单地处理类似文件的对象?

AFAIR标记被附加到文件的末尾。您可能想学习格式并自己制作一个简单的库,这应该不是很困难


也可以考虑在TMPFS(RAMDISM)等文件系统上临时存储它们。 StringIO有帮助吗

答案似乎是不存在这样的动物。编程到接口的优势显然在python MP3框架黑客身上消失了。我们通过修改一个现有的库来解决这个问题。

对于那些在遥远的将来找到这个答案的人来说,它对我来说非常有效,其中一个MP3对象的构造函数要么采用文件路径,要么采用类似文件的对象(文档称之为“文件对象”)

发件人:

传递给文件类型或元数据的第一个参数可以是文件名,也可以是类似文件的对象,例如StringIO(Python 3中的BytesIO),诱变剂将确定该做什么

MP3("myfile.mp3")
MP3(myfileobj)

问题是,我看到的所有库都不能用StringIO或类似的方式工作,因为它们需要一个文件系统路径。而且你不想修改一个更简单的库?你会推荐一个简单的库来修改吗?我只需要浏览PyPI上的库,找到一个满足你需要且很小的库。您可以重新定义open以获取字符串(而不是文件名)并返回fh,其中fh=StringIO.StringIO(string\u变量)。是的。至于tmpfs,它太粗糙了。我的内存中已经有了这个对象——为什么我需要复制它来处理它呢?因为这样可以节省编程时间。在RAM中复制相对便宜(在我3岁的笔记本电脑上,5MB文件需要0.05秒)。因此,决定因素是你如何评价你的努力。与服务器需要执行的其他任务相比,唯一更重要的是复制所引入的服务器负载。。。我对你的代码一无所知,所以你自己决定吧。你完全正确,我们最终可能会这样做,或者推出我们自己的框架黑客策略。然而,问题的关键是通过发现一个开箱即用的解决方案来避免所有这些,这将节省我们的编程时间。黑客攻击框架或黑客攻击服务器是更多的工作,而不是更少,并且超出了这个问题的范围。这应该是2019年(也称为“遥远的未来”)公认的答案。顺便说一句,如果您使用的是Django,并且您有一个带有FileField的模型,那么您只需将FieldFile对象传递给诱变剂,它就会按预期工作。例如,如果您有一个带有字段
audio
的模型,并且您有一个模型
实例
,那么您可以执行
诱变剂.File(instance.audio)
,并且您可以按预期访问
信息