使用google app引擎上传和解析csv文件 [英] Upload and parse csv file with google app engine

查看:198
本文介绍了使用google app引擎上传和解析csv文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道如果有人更好地了解python和gae可以帮助我这个。我正在将csv文件从表单上传到gae数据存储。

  class CSVImport(webapp.RequestHandler):
def post(self):
csv_file = self。 request.get('csv_import')
fileReader = csv.reader(csv_file)
for fileReader:
self.response.out.write(row)

我遇到了其他人在这里提到的相同问题 - http://groups.google.com/group/google-appengine/browse_thread/thread/bb2d0b1a80ca7ac2/861c8241308b9717

也就是说,csv.reader遍历每个字符,而不是行。一位google工程师留下了这个解释:


调用self.request.get('csv')会返回一个String。当你遍历
字符串时,你将遍历字符,而不是行。您可以在这里看到
的区别:




  class ProcessUpload(webapp.RequestHandler) :
def post(self):
self.response.out.write(self.request.get('csv'))
file = open(os.path.join path.dirname(__ file__),'sample.csv'))
self.response.out.write(file)

#遍历文件
fileReader = csv.reader (文件)
for fileReader:
self.response.out.write(row)

#通过字符串迭代
fileReader = csv.reader .request.get('csv'))
for fileReader:
self.response.out.write(row)

我真的不遵循的解释,并没有成功实现它。



感谢,
August

解决方案

简短的答案,请尝试:

  fileReader = csv.reader(csv_file.split \\\
))

长回答,请考虑以下情况:

 对于东西:
print thing.strip()。split(,)

如果stuff是一个文件指针,每个东西都是一行。如果stuff是一个列表,每个东西都是一个项目。如果stuff是一个字符串,每一个东西都是一个字符。



迭代csv.reader返回的对象会给你类似于遍历传递的对象的行为,只有每个项目都经过CSV解析。如果您遍历字符串,您将获得每个字符的CSV解析版本。


I'm wondering if anyone with a better understanding of python and gae can help me with this. I am uploading a csv file from a form to the gae datastore.

class CSVImport(webapp.RequestHandler):
  def post(self):
     csv_file = self.request.get('csv_import')
     fileReader = csv.reader(csv_file)
     for row in fileReader:       
       self.response.out.write(row) 

I'm running into the same problem that someone else mentions here - http://groups.google.com/group/google-appengine/browse_thread/thread/bb2d0b1a80ca7ac2/861c8241308b9717

That is, the csv.reader is iterating over each character and not the line. A google engineer left this explanation:

The call self.request.get('csv') returns a String. When you iterate over a string, you iterate over the characters, not the lines. You can see the difference here:

 class ProcessUpload(webapp.RequestHandler): 
   def post(self): 
     self.response.out.write(self.request.get('csv')) 
     file = open(os.path.join(os.path.dirname(__file__), 'sample.csv')) 
     self.response.out.write(file) 

     # Iterating over a file 
     fileReader = csv.reader(file) 
     for row in fileReader: 
       self.response.out.write(row) 

     # Iterating over a string 
     fileReader = csv.reader(self.request.get('csv')) 
     for row in fileReader: 
       self.response.out.write(row) 

I really don't follow the explanation, and was unsuccessful implementing it. Can anyone provide a clearer explanation of this and a proposed fix?

Thanks, August

解决方案

Short answer, try this:

fileReader = csv.reader(csv_file.split("\n"))

Long answer, consider the following:

for thing in stuff:
  print thing.strip().split(",")

If stuff is a file pointer, each thing is a line. If stuff is a list, each thing is an item. If stuff is a string, each thing is a character.

Iterating over the object returned by csv.reader is going to give you behavior similar to iterating over the object passed in, only with each item CSV-parsed. If you iterate over a string, you'll get a CSV-parsed version of each character.

这篇关于使用google app引擎上传和解析csv文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆