python使用wget.download()提示ValueError: not enough values to unpack (expected 2, got 1) not enough valu - Go语言中文社区

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())

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

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_15054345/article/details/113564377
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-13 15:43:09
  • 阅读 ( 857 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢