在GAE blob中访问制表符分隔的值内容,但使用通用换行模式或等效方式
我正在尝试在一个Google App Engine应用中读取TSV文件的内容。
我可以通过以下方式顺利读取文件:
f=csv.reader(open(matrixpath, "rU"),dialect='excel-tab')
但是现在我需要使用blobreader从blobstore中读取数据:
blob_key = ...
blobdata = blobstore.BlobReader(blob_key)
f=csv.reader(blobdata,dialect='excel-tab')
如果不加上rU这个参数,我会遇到一个错误,提示在未加引号的字段中出现了换行符:
错误:在未加引号的字段中看到换行符 - 你是否需要以通用换行模式打开文件?
我想要么修复我的文件,以避免这个错误,要么模拟从blobstore以通用换行模式打开文件?
我的文件大约有20MB,这里有一个缩减版的样本(脚本在这个样本上仍然失败)。
2 个回答
-1
来自于 在Google App Engine上用Python上传和解析带有“通用换行符”的csv文件 的回答对我有用:
csv.reader(blob.open.read().splitlines())
这个方法可以用来读取在GNU/Linux系统上格式为Mac的csv文件。
1
我无法直接从示例文件中重现这个错误。你能做到吗?
假设有这段代码 blob = open('sample-file.tsv', 'rb').read()
:
用
reader = csv.reader(blob, dialect='excel-tab')
读取时,产生了很多一字节的字段,这个是正常的。如果用
StringIO.StringIO(blob)
或者blob.splitlines()
来替代,结果是50行,每行大约有10000列……看起来是正常工作的。
除非你提供 (1) 你的 blob 上传代码(还有相关文档的链接) (2) 你在 GAE 上遇到错误的代码,否则我无法提供进一步的帮助。