在Python中上载和读取csv文件

在Python中上载和读取csv文件,python,html,forms,csv,upload,Python,Html,Forms,Csv,Upload,我有一个程序可以从CSV文件中读取和排序信息,但我不知道如何上传文件,或者直接读取(我认为这是不可能的),或者上传到服务器 我尝试在谷歌上搜索的所有东西要么不起作用,要么看起来太模棱两可 有人知道如何从HTML表单上传文件以便我在程序中读取吗 要读取文件,我正在使用csv模块: readerCTR = csv.reader(open("/home/ctrdata.csv", "rb")) 我使用的是一个非常基本的html表单: <form action="test" method="po

我有一个程序可以从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>
但我只得到关键错误

KeyError: 'myfile'
看起来它根本没有通过。如果我检查调试器:

>>> form
FieldStorage(None, None, [])
这些对我来说毫无意义。我以前从未上传过文件。我有一个服务器,我可以保存它,如果我需要的话,但它将是理想的,如果我可以读取它,并暂时保存数据


你认为这可能是因为我在使用Firefox和Linux吗?

如果出现错误,则意味着上传工作正常-有点:调用了CGI脚本,但参数有问题。调试此文件的步骤:

  • form.keys()
    打印到
    sys.stdout
    。这应该会给你一个按键列表,这样你就可以检查打字错误了

  • 检查
    cgi
    模块的版本。文件上说

    最新的新增功能是支持从表单上传文件


  • (我的重点)。可能是您的版本太旧了。

    您收到错误意味着上传工作正常-有点:调用了您的CGI脚本,但参数有问题。调试此文件的步骤:

  • form.keys()
    打印到
    sys.stdout
    。这应该会给你一个按键列表,这样你就可以检查打字错误了

  • 检查
    cgi
    模块的版本。文件上说

    最新的新增功能是支持从表单上传文件


  • (我的重点)。可能你的版本太旧了。

    问题是我使用的是挂架,所以它几乎忽略了CGI

    因此,我应该使用:

    request.POST['myfile'].value
    

    问题是我使用的是挂架,所以它几乎忽略了CGI

    因此,我应该使用:

    request.POST['myfile'].value
    

    愚蠢的问题,但是你有结束标记吗?如果不是,也许浏览器会自动关闭它,这样文件输入就不会包含在表单本身中了?这应该是可行的。按照丹尼尔的建议,检查一下你的表格。对不起,是的,表格上确实有一个结束标签,我只是赶着去贴。我不明白为什么我会遇到这个关键问题,但是你有一个结束标记吗?如果不是,也许浏览器会自动关闭它,这样文件输入就不会包含在表单本身中了?这应该是可行的。按照丹尼尔的建议,检查一下你的表格。对不起,是的,表格上确实有一个结束标签,我只是赶着去贴。我不明白为什么我在使用Python2.6时会出现这个关键错误,所以我想这就是cgi的版本。如果我尝试TypeError:sys.stdout(form.keys()),我只得到“file”对象是不可调用的,这没有意义,因为它可以很好地用于打印。虽然如果我打印它,它会显示FieldStorage(无,无,[])抱歉。试试
    print form.keys()
    sys.stdout.
    **write**
    ()
    :-)我使用的是Python2.6,所以我想这就是cgi的版本。如果我尝试TypeError:sys.stdout(form.keys()),我只得到“file”对象是不可调用的,这没有意义,因为它可以很好地用于打印。虽然如果我打印它,它会显示FieldStorage(无,无,[])抱歉。尝试
    打印表单.keys()
    sys.stdout.
    **编写**
    ()
    :-)