在Python中上传和读取CSV文件

1 投票
2 回答
4397 浏览
提问于 2025-04-17 06:55

我有一个程序可以读取和排序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脚本被调用了,但参数有点问题。下面是一些调试的步骤:

  1. form.keys() 的内容打印到 sys.stdout。这样你就能看到一个键的列表,可以检查一下有没有拼写错误。

  2. 检查一下你的 cgi 模块的版本。文档上说:

    最新的版本支持从表单上传文件

(我强调一下)。也许你的版本太旧了。

1

这个问题是因为我在使用Pylons框架,所以它几乎不理会CGI的设置。

所以我应该使用的是:

request.POST['myfile'].value

撰写回答