【问题标题】:Read csv file in tornado web framework在 Tornado Web 框架中读取 csv 文件
【发布时间】:2012-08-28 04:32:23
【问题描述】:

我是 tornado web 框架的新手。 目前我正在构建一个 应该 加载 csv 文件然后处理它的 Web 应用程序。我尝试在 python 中使用 csv 模块,还尝试了对我没有帮助的表格模块。

所以,我的问题是,是否有任何包或开源库可以读取 csv 文件数据并将其存储在某种变量中,以便我可以对文件执行各种操作。

我收到以下错误:

raise ValueError, "Need formats argument"

我的代码是:

import re
import sys
import os.path
import tornado.httpserver
import webbrowser
import personalfile
import tabular as tb
import csv

try:
    import tornado.ioloop
    import tornado.web
except:
    print 'No tornado module installed, Please install the tornado from http://www.tornadoweb.org/'
    sys.exit()

SRC = os.path.dirname(__file__)

# Main Handler
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.render("static/template_upload.html")



class OutputHandler(tornado.web.RequestHandler):
    def post(self):
        template_file = self.get_argument('template_html', None)
        **data_file = self.get_argument('csvfile', None)
        data_file = csv.DictReader(data_file)**
        data_file = tb.tabarray(data_file, verbosity=0, headerlines=1)
        xhtmlOutput = personalfile.function([templatehtmlfile,data_file])

        self.render('output.xhtml', data = xhtmlOutput)


application = tornado.web.Application([
    (r"/", MainHandler),
    (r"/output", OutputHandler)
], debug=True,
   static_path=os.path.join(SRC, "static")
)



if __name__ == "__main__":
    print open(os.path.join(SRC, 'static', 'intro.txt')).read()
    webbrowser.open('http://127.0.0.1:8888')

    application.listen(8888)
    tornado.ioloop.IOLoop.instance().start()

【问题讨论】:

  • 内置的csv 模块这样做没有任何问题。你有什么问题?是否抛出错误? csv文件的格式是什么,在哪里?
  • 你忘了说你正在做的事情是如何失败的。
  • @Ignacio Vazquez-Abrams 对不起。我添加了我得到的错误。
  • @jozzas 我的问题不在于 csv 文件的格式。如果您需要 csv 文件的示例,假设 csv 有 2 列,其中一列是学生的姓名,一列是学生数学科目的分数。

标签: python csv tornado


【解决方案1】:

csv.DictReader 对象[module docs] 不是这样工作的。您只是制作了阅读器,并未实际提取任何数据。如果您希望存储所有数据,则必须实际读取它。例如:

>>> import csv
>>> with open("test.csv") as fp:
...     reader = csv.reader(fp)
...     data = list(reader)
... 
>>> data
[['a', 'b', 'c'], ['1', '2', '3'], ['4', '5', '6']]
>>> 
>>> with open("test.csv") as fp:
...     reader = csv.DictReader(fp)
...     data = list(reader)
... 
>>> data
[{'a': '1', 'c': '3', 'b': '2'}, {'a': '4', 'c': '6', 'b': '5'}]

等等。您是否真的需要一次所有数据取决于您的代码。

【讨论】:

    【解决方案2】:

    我的代码有错误。您上传的文件可从self.request.files获得

    参考:http://www.tornadoweb.org/documentation/overview.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-21
      • 2010-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2012-02-19
      • 2017-02-16
      相关资源
      最近更新 更多