在Python中上传和读取CSV文件
我有一个程序可以读取和排序CSV文件里的信息,但我不知道怎么上传文件,也不知道怎么直接读取文件(我觉得这可能不行),或者怎么把文件上传到服务器上。
我在网上查了很多资料,但要么不管用,要么说得太模糊了。
有没有人知道怎么从HTML表单上传文件,这样我就可以在程序里读取它?
为了读取文件,我使用了csv模块:
readerCTR = csv.reader(open("/home/ctrdata.csv", "rb"))
我用的是一个非常简单的HTML表单:
<form action="test" method="post" enctype="multipart/form-data">
Upload file: <input type="file" name="myfile" /> <br />
<input type="submit" name="submit" value="Submit" />
</form>
我还试着看了关于CGI的教程,地址在docs.python上。
form = cgi.FieldStorage()
fileitem = form["myfile"]
if fileitem.file:
linecount = 0
while 1:
line = fileitem.file.readline()
if not line: break
linecount = linecount + 1
但我总是遇到键错误。
KeyError: 'myfile'
看起来文件根本没有被传递过来。如果我检查调试器:
>>> form
FieldStorage(None, None, [])
这些对我来说一点都不明白。我之前从来没有上传过文件。如果需要的话,我有一个服务器可以保存文件,但如果能直接读取并临时保存数据就更好了。
你觉得是不是因为我用的是Firefox和Linux?
2 个回答
0
你看到这个错误说明上传功能是有作用的——可以这么说:你的CGI脚本被调用了,但参数有点问题。下面是一些调试的步骤:
把
form.keys()
的内容打印到sys.stdout
。这样你就能看到一个键的列表,可以检查一下有没有拼写错误。检查一下你的
cgi
模块的版本。文档上说:最新的版本支持从表单上传文件
(我强调一下)。也许你的版本太旧了。
1
这个问题是因为我在使用Pylons框架,所以它几乎不理会CGI的设置。
所以我应该使用的是:
request.POST['myfile'].value