使用“通用换行符”上传并解析 csv 文件在 Google App Engine 上的 python 中
我正在从 GAE 中的表单上传 csv/tsv 文件,并尝试使用 python csv 模块解析该文件。
正如此处所述,GAE 中上传的文件是字符串.
因此,我将上传的字符串视为类似文件的对象:
file = self.request.get('catalog')
catalog = csv.reader(StringIO.StringIO(file),dialect=csv.excel_tab)
但文件中的新行不一定是“\n”(感谢 Excel..),并且它生成了一个错误:
错误:在未引用的字段中看到换行符 - 您需要以通用换行模式打开文件吗?
有谁知道如何使用 StringIO.StringIO 来处理像在通用换行中打开的文件一样的字符串?
I'm uploading a csv/tsv file from a form in GAE, and I try to parse the file with python csv module.
Like describe here, uploaded files in GAE are strings.
So I treat my uploaded string a file-like object :
file = self.request.get('catalog')
catalog = csv.reader(StringIO.StringIO(file),dialect=csv.excel_tab)
But new lines in my files are not necessarily '\n' (thanks to excel..), and it generated an error :
Error: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
Does anyone know how to use StringIO.StringIO to treat strings like files open in universal-newline?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
怎么样:
或者正如评论中指出的,
csv.reader()
支持从列表中输入,所以:或者如果将来
request.get
支持读取模式:How about:
or as pointed out in the comments,
csv.reader()
supports input from a list, so:or if in the future
request.get
supports read modes:此处描述的解决方案应该可行。通过如下定义一个迭代器类,一次加载 1MB 的 blob,使用 .splitlines() 分割行,然后一次将一行提供给 CSV 读取器,无需加载整个文件即可处理换行符进入记忆。
然后这样称呼它:
The solution described here should work. By defining an iterator class as follows, which loads the blob 1MB at a time, splits the lines using .splitlines() and then feeds lines to the CSV reader one at a time, the newlines can be handled without having to load the whole file into memory.
Then call this like so: