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

问题描述 投票:0回答:1

包含一个.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,所以我无法解压缩它们。有什么想法如何下载实际的保管箱文件吗?

python-3.x dropbox
1个回答
0
投票

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

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

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


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中的输出参数。

© www.soinside.com 2019 - 2024. All rights reserved.