使用Python从OneDrive下载Excel文件导致文件损坏。

5
我正在尝试从 OneDrive 中下载一个 Excel 文件。我的代码可以获取文件,但是该文件损坏了(我收到了错误消息)。
import urllib2

data = urllib2.urlopen("enter url here")
with open('C:\\Video.xlsx', 'wb') as output:
    output.write(data.read())
output.close()
print "done"

我使用访客访问excel文件,这样我就不必进行身份验证。生成的文件似乎是15KB,原始文件是22KB。


1
如果在浏览器中输入相同的URL,您会得到一个下载还是显示Excel Web界面?如果是后者,那基本上也就是你写入文件的内容。您应该确保URL直接指向二进制文件。另外,请确保您不需要先进行身份验证。简而言之,请查看“数据”的内容,这可能会澄清一些问题。 - DocZerø
如果您在文本编辑器中打开下载的文件,是否会看到一个包含JavaScript的HTML页面? - Dan-Dev
@Kristof,我已经获得了Excel界面。我不确定如何获取二进制文件的链接...OneDrive在存储这些东西时有点令人困惑。我基本上会得到一个链接,例如(这不是真实的链接):https://my.sharepoint.com/personal/myname/layouts/15/WopiFrame.aspx?guestaccesstoken=abunchofcharacters=view - LKMS
@Dan-Dev,好主意,没错,那个是HTML页面...所以有人知道如何获取实际的二进制或Excel内容吗? - LKMS
我会先查看Kristof的答案。 - Dan-Dev
2个回答

6

我明白了,该网址的格式如下:

'https://onedrive.live.com/view.aspx?cid=.....app=Excel'

所以,我需要做的就是在该网址中将"view"替换为"download",然后使用以下代码:

import urllib.request

url = 'https://onedrive.live.com/view.aspx?cid=.....app=Excel'

urllib.request.urlretrieve(url, "test.xlsx")

这是一个好的解决方案-需要在上面的例子中用“下载”替换“查看”。编辑队列已满。 - grantr

4
您不能直接使用URL从OneDrive下载Excel文件。即使您共享了未经授权的文件,您也可能会得到一个链接到中间HTML页面而不是Excel二进制文件。
要从OneDrive下载项目,您首先需要进行身份验证,然后传递您想要的文件的位置。您可能希望使用OneDrive REST API。如何操作的详细信息已在OneDrive's SDK for Python GitHub页面上有记录,并提供了一些示例来帮助您入门。

4
显然,onedrivesdk现在已经被弃用。 - Maile Cupo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接