python使用wget.download()提示ValueError: not enough values to unpack (expected 2, got 1) not enough valu

最近在做动手深度学习的内容时,使用到了wget.download()函数,其中发生了一件很诡异的事儿,在kaggle上跑代码时有时候数据集能下载成功,有时候却一直报错:ValueError: not enough values to unpack (expected 2, got 1)

not enough values to unpack (expected 2, got 1)

代码如下:


def download_data():
    data = os.getcwd() + '/data'
    base_url = 'https://apache-mxnet.s3-accelerate.amazonaws.com/'
    wget.download(
			url = base_url + 'gluon/dataset/hotdog.zip',
                  out = data)
    with zipfile.ZipFile('data', 'r') as z:  # 解压数据集
        z.extractall(os.getcwd())


download_data()

各种搜索找不到原因,后来看了下调用栈,发现了这么一句:

ValueError
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-9-b10f1b804f4f> in <module>
     27 
     28 
---> 29 download_data()
     30 
     31 '''

<ipython-input-9-b10f1b804f4f> in download_data()
     22     wget.download(
     23                         url = base_url + 'gluon/dataset/hotdog.zip',
---> 24                   out = data)
     25     with zipfile.ZipFile('data', 'r') as z:  # 解压数据集
     26         z.extractall(os.getcwd())

/opt/conda/lib/python3.7/site-packages/wget.py in download(url, out, bar)
    531     # add numeric ' (x)' suffix if filename already exists
    532     if os.path.exists(filename):
--> 533         filename = filename_fix_existing(filename)
    534     shutil.move(tmpfile, filename)
    535 

/opt/conda/lib/python3.7/site-packages/wget.py in filename_fix_existing(filename)
    267     """
    268     dirname = u'.'
--> 269     name, ext = filename.rsplit('.', 1)
    270     names = [x for x in os.listdir(dirname) if x.startswith(name)]
    271     names = [x.rsplit('.', 1)[0] for x in names]

ValueError: not enough values to unpack (expected 2, g

在534行报错的地方,有个shutil.move函数,这个函数用于文件夹移动,所以初步怀疑是第一次下载好的数据集不为空,导致wget,download()函数会想办法将原来的数据集移到其他目录里面去,但是一般使用这个函数只会指定url和下载路径,很少见指定移动路径的,所以有一个思路是:要么在调用这个函数之前先判断路径是否已经存在了,存在就删除路径重新下载,或者路径不存在时才调用wget.download()。

更改之后的代码如下:

def download_data():
    data = os.getcwd() + '/data'
    base_url = 'https://apache-mxnet.s3-accelerate.amazonaws.com/'
    if not os.path.exists(data):  # 如果文件没有下载好,才进行下载
        wget.download(
            base_url + 'gluon/dataset/hotdog.zip',
            data)

    with zipfile.ZipFile('data', 'r') as z:
        z.extractall(os.getcwd())

或者:

def download_data_2():
    data = os.getcwd() + '/data'
    base_url = 'https://apache-mxnet.s3-accelerate.amazonaws.com/'
    if os.path.exists(data):  # 如果文件已经下载好了,则删除文件重新进行下载
        os.remove(data)
    wget.download(
        base_url + 'gluon/dataset/hotdog.zip',
        data)

    with zipfile.ZipFile('data', 'r') as z:
        z.extractall(os.getcwd())

下图是我改了之后的代码,先将运行第一遍将数据集下载好,然后直接点击取消运行,再进行第二遍运行,结果证实了我的猜想是对的:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值