<p>我无法从归档文件中提取python3。一些调查结果(在macosx上)可能会有帮助。在</p>
<h2>检查档案的运行状况</h2>
<p>将文件设为只读,以防止意外更改:</p>
<pre><code>$ chmod -w vertnet_latest_amphibians.zip
$ ls -lh vertnet_latest_amphibians.zip
-r r r 1 lawh 2045336417 296M Jan 6 10:10 vertnet_latest_amphibians.zip
</code></pre>
<p>使用<code>zip</code>和<code>unzip</code>检查存档:</p>
^{pr2}$
<p>@sam mussmann也发现,<code>7z</code>报告了一个CRC错误:</p>
<pre><code>$ 7z t vertnet_latest_amphibians.zip
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs x64)
Scanning the drive for archives:
1 file, 309726398 bytes (296 MiB)
Testing archive: vertnet_latest_amphibians.zip
Path = vertnet_latest_amphibians.zip
Type = zip
Physical Size = 309726398
ERROR: CRC Failed : vertnet_latest_amphibians.csv
Sub items Errors: 1
Archives with Errors: 1
Sub items Errors: 1
</code></pre>
<p>我的<code>zip</code>和<code>unzip</code>都很老;<code>7z</code>很新:</p>
<pre><code>$ zip -v | head -2
Copyright (c) 1990-2008 Info-ZIP - Type 'zip "-L"' for software license.
This is Zip 3.0 (July 5th 2008), by Info-ZIP.
$ unzip -v | head -1
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
$ 7z help |head -3
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=utf8,Utf16=on,HugeFiles=on,64 bits,4 CPUs x64)
</code></pre>
<h2>摘录</h2>
<p>使用<code>unzip</code>:</p>
<pre><code>$ time unzip vertnet_latest_amphibians.zip vertnet_latest_amphibians.csv
Archive: vertnet_latest_amphibians.zip
inflating: vertnet_latest_amphibians.csv
real 0m17.201s
user 0m14.281s
sys 0m2.460s
</code></pre>
<p>使用Python 2.7.13进行提取,为简洁起见,使用<code>zipfile</code>的命令行界面:</p>
<pre><code>$ time ~/local/python-2.7.13/bin/python2 -m zipfile -e vertnet_latest_amphibians.zip .
real 0m19.491s
user 0m12.996s
sys 0m5.897s
</code></pre>
<p>正如您所发现的,python3.6.0(也是3.4.5和3.5.2)报告了一个错误的CRC</p>
<p>假设1:档案包含一个错误的CRC,<code>zip</code>,<code>unzip</code>并且
Python2.7.13无法检测;<code>7z</code>和python3.4-3.6都在执行
没错。在</p>
<p>假设2:存档很好;<code>7z</code>和python3.4-3.6都包含一个bug。在</p>
<p>考虑到这些工具的相对年龄,我想H1是正确的。在</p>
<h2>变通办法</h2>
<p>如果您不使用Windows并且信任存档的内容,那么使用常规shell命令可能会更简单。比如:</p>
<pre><code>wget <the-long-url> -O /tmp/vertnet_latest_amphibians.zip
unzip /tmp/vertnet_latest_amphibians.zip vertnet_latest_amphibians.csv
rm -rf /tmp/vertnet_latest_amphibians.zip
</code></pre>
<p>或者您可以在Python中执行<code>unzip</code>:</p>
<pre><code>import os
os.system('unzip vertnet_latest_amphibians.zip vertnet_latest_amphibians.csv')
</code></pre>
<h2>附带的</h2>
<p>捕捉<code>ImportError</code>比检查
Python解释器:</p>
<pre><code>try:
from urllib.request import urlretrieve
except ImportError:
from urllib import urlretrieve
</code></pre>