我想知道是否有对 python 和 gae 有更好了解的人可以帮助我解决这个问题。我正在将一个 csv 文件从表单上传到 gae 数据存储区。
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)
我遇到了其他人在这里提到的相同问题 - http://groups.google.com/group/google-appengine/browse_thread/thread/bb2d0b1a80ca7ac2/861c8241308b9717
也就是说,csv.reader 遍历每个字符而不是行。一位谷歌工程师留下了这样的解释:
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)
我真的不理解这个解释,并且没有成功实现它。任何人都可以对此提供更清晰的解释和建议的修复方法吗?
谢谢, 八月
最佳答案
简短的回答,试试这个:
fileReader = csv.reader(csv_file.split("\n"))
长答案,请考虑以下内容:
for thing in stuff:
print thing.strip().split(",")
如果 stuff 是一个文件指针,那么每个东西都是一行。如果东西是一个列表,那么每个东西都是一个项目。如果 stuff 是一个字符串,则每个东西都是一个字符。
遍历 csv.reader 返回的对象会给你类似于遍历传入的对象的行为,只是每个项目都经过 CSV 解析。如果您遍历一个字符串,您将获得每个字符的 CSV 解析版本。
关于python - 使用谷歌应用引擎上传和解析 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970599/