使用zipfile
模块在Python中解压缩大型数据文件在Python 2上正常工作,但在Python 3.6.0上产生以下错误:
BadZipFile: Bad CRC-32 for file 'myfile.csv'
我将此跟踪到错误处理代码检查CRC值.
ZipFile.testzip()
在Python 2上使用什么都不返回(所有文件都没问题).在Python 3上运行它会返回'myfile.csv'
指示该文件的问题.
在Python 2和Python 3上重现的代码(涉及300 MB下载,抱歉):
import zipfile
import urllib
import sys
url = "https://de.iplantcollaborative.org/anon-files//iplant/home/shared/commons_repo/curated/Vertnet_Amphibia_Sep2016/VertNet_Amphibia_Sept2016.zip"
if sys.version_info >= (3, 0, 0):
urllib.request.urlretrieve(url, "vertnet_latest_amphibians.zip")
else:
urllib.urlretrieve(url, "vertnet_latest_amphibians.zip")
archive = zipfile.ZipFile("vertnet_latest_amphibians.zip")
archive.testzip()
Run Code Online (Sandbox Code Playgroud)
有没有人理解为什么存在这种差异,以及是否有办法让Python 3使用以下方法正确提取文件:
archive.extract("vertnet_latest_amphibians.csv")
Run Code Online (Sandbox Code Playgroud) 我在Linux和Windows XP上运行MATLAB.我的文件在我使用的所有计算机中同步,但由于Linux和Windows之间的目录结构不同,我必须为不同的操作系统分别设置导入和导出行.目前我只是为错误的操作系统注释掉了这一行,但我想知道是否有可能写下这样的内容:
if OS == Windows
datafile = csvread('C:\Documents and Settings\Me\MyPath\inputfile.csv');
else
datafile = csvread('/home/Me/MyPath/inputfile.csv');
end
Run Code Online (Sandbox Code Playgroud)
这也是一个更普遍的问题,适用于需要使用MATLAB执行系统命令的情况system('command')
.