从CSV文件下载多个Dropbox zip文件

时间:2020-01-23 20:20:15

标签: python-3.x dropbox

其中包含一个.csv文件,其中包含〜100个指向保管箱文件的链接。我目前使用的方法是下载缺少?dl=0扩展名(似乎很关键)的文件

#import packages
import pandas as pd 
import wget

#read the .csv file, iterate through each row and download it
data = pd.read_csv("BRAIN_IMAGING_SUMSTATS.csv") 
for index, row in data.iterrows():
    print(row['Links'])
    filename = row['Links']
    wget.download(filename)

输出:

https://www.dropbox.com/s/xjtu071g7o6gimg/metal_roi_volume_dec12_2018_pheno1.txt.zip?dl=0
https://www.dropbox.com/s/9oc9j8zhd4mn113/metal_roi_volume_dec12_2018_pheno2.txt.zip?dl=0
https://www.dropbox.com/s/0jkdrb76i7rixa5/metal_roi_volume_dec12_2018_pheno3.txt.zip?dl=0
https://www.dropbox.com/s/gu5p46bakgvozs5/metal_roi_volume_dec12_2018_pheno4.txt.zip?dl=0
https://www.dropbox.com/s/8zfpfscp8kdwu3h/metal_roi_volume_dec12_2018_pheno5.txt.zip?dl=0

这些看起来像正确的链接,但下载文件的格式为

metal_roi_volume_dec12_2018_pheno1.txt.zip而不是metal_roi_volume_dec12_2018_pheno1.txt.zip?dl=0,所以我无法解压缩它们。有什么想法可以下载实际的保管箱文件吗?

2 个答案:

答案 0 :(得分:0)

默认情况下(没有额外的URL参数,或者像示例中那样使用dl=0),Dropbox共享链接指向链接文件的HTML预览页,而不是文件数据本身。您的代码按原样将下载HTML,而不是实际的zip文件数据。

不过,您可以修改这些链接以直接访问文件,如this Dropbox help center article中所述。

因此,您应先修改链接,例如在调用raw=1之前,使用dl=0代替wget.download

答案 1 :(得分:0)

快速修复方法如下:

#import packages
import pandas as pd 
import wget
import os
from urllib.parse import urlparse 

#read the .csv file, iterate through each row and download it
data = pd.read_csv("BRAIN_IMAGING_SUMSTATS.csv") 
for index, row in data.iterrows():
    print(row['Links'])
    filename = row['Links']
    parsed = urlparse(filename)
    fname = os.path.basename(parsed.path)
    wget.download(filename, fname)

基本上,您从URL中提取文件名,然后将该文件名用作wget.download fn中的输出参数。

相关问题