代码之家  ›  专栏  ›  技术社区  ›  Workhorse

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

  •  0
  • Workhorse  · 技术社区  · 5 年前

    我有一个。包含约100个dropbox文件链接的csv文件。我目前使用的方法是下载缺少 ?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 ,所以我无法解压。你知道如何下载dropbox文件吗?

    1 回复  |  直到 5 年前
        1
  •  0
  •   Greg    5 年前

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

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

    因此,您应该修改链接,例如使用 raw=1 而不是 dl=0 ,打电话之前 wget.download 在上面。

        2
  •  0
  •   Milos K    5 年前

    快速修复方法大致如下:

    #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中的输出参数。下载fn。

    推荐文章