Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取上传的zip文件_Python_Google App Engine_Zip_Cgi - Fatal编程技术网

Python 读取上传的zip文件

Python 读取上传的zip文件,python,google-app-engine,zip,cgi,Python,Google App Engine,Zip,Cgi,如何读取使用html格式和Cgi上传的zip文件中的文件项,我尝试如下: form = cgi.FieldStorage() file_upload = form['file'] if zipfile.is_zipfile(file_upload.filename): print "%s is a valid pkzip file" % file_upload.filename else: print "%s is not a valid pkzip file" % file_

如何读取使用html格式和Cgi上传的zip文件中的文件项,我尝试如下:

form = cgi.FieldStorage() 
file_upload = form['file']
if zipfile.is_zipfile(file_upload.filename):
    print "%s is a valid pkzip file" % file_upload.filename
else:
    print "%s is not a valid pkzip file" % file_upload.filename
zfile=zipfile.ZipFile(file_upload.filename,"r")
files_zip=zfile.namelist()
例如,当我上传(test.zip)时,错误是没有这样的文件或目录:'test.zip',如果我运行代码时没有这个
zfile=zipfile.zipfile(file_upload.filename,“r”)
,我会发现test.zip不是有效的pkzip文件。
提前感谢。

您可以尝试将
文件上传.file
传递到
ZipFile
而不是
文件上传.filename

下面是一个脚本,用于打印zip文件中的文件列表:

import sys
sys.stderr = sys.stdout
print "Content-Type: text/plain"
print

import cgi
import zipfile

form = cgi.FieldStorage()

filefield = form['somefile']
print "Filename:", filefield.filename

if filefield.file is not None and zipfile.is_zipfile(filefield.file):
    zfile = zipfile.ZipFile(filefield.file)
    print "Name list:\n\t",
    print "\n\t".join(zfile.namelist())
以及相应的html表单:

<!DOCTYPE html>
<form enctype="multipart/form-data" action="file-upload" method=post>
<p><label for=somefile>File: <input type=file name=somefile>
<p><input type=submit>
</form>

文件:


你为什么要传递文件名而不是文件?@Ignacio Vazquez Abrams:当我传递文件时,我遇到了一个错误:强制使用Unicode:需要字符串或缓冲区,cStringIO.StringO发现,我在google app engine中运行了我的代码。啊,它使用的版本可能还不需要这样的文件。@Ignacio Vazquez Abrams:那么我可以做什么来读取(摘录)zip内容??我只需跳过检查,直接将文件传递到
ZipFile