在Windows中使用Python下载Mp3会损坏歌曲,但在Linux中不会
我设置了一个脚本,用Python的urllib2来下载mp3文件。
url = 'example.com'
req2 = urllib2.Request(url)
response = urllib2.urlopen(req2)
#grab the data
data = response.read()
mp3Name = "song.mp3"
song = open(mp3Name, "w")
song.write(data) # was data2
song.close()
结果发现,这个问题可能和我在Windows上下载有关,或者是我当前的Python版本有关系。我在我的Ubuntu系统上测试了这个代码,mp3文件下载得非常顺利……所以我就用了简单的 urllib2.openurl
方法,效果很好!
总结一下:
- 我在Ubuntu系统上用Python的
urllib2.openurl
。 - 我用的是较新的Python版本,但我觉得这不是问题所在。
- 这些mp3文件是用LAME编码的。
有没有人知道为什么在我的Windows电脑上运行代码时会出现奇怪的问题?我很好奇为什么在Windows上下载会搞乱mp3文件?
1 个回答
15
试试用二进制文件模式。open(mp3Name, "wb")
。你可能遇到了行结束符转换的问题。
这个文件确实是二进制文件,但打开它的方式不对。当你打开一个文件时,可以选择以文本文件的方式读取(这是默认设置)。如果这样做,系统会把行结束符转换成适合当前平台的格式。在Windows系统上,行结束符是\r\n
,而在其他地方通常是\r
或\n
。这种转换会搞乱数据流。