背景:我正在Python /
AppEngine项目中获取数据并创建一个.tsv文件,以便可以使用d3.js创建图表。现在,我要在每次加载页面时编写CSV文件;我想将文件一次存储在Google云端存储中,然后从那里读取文件。
每次加载页面时,我当前如何编写文件!:
def get(self): ## this gets called when loading myfile.tsv from d3.js
datalist = MyEntity.all()
self.response.headers['Content-Type'] = 'text/csv'
writer = csv.writer(self.response.out, delimiter='\t')
writer.writerow(['field1', 'field2'])
for eachco in datalist:
writer.writerow([eachco.variable1, eachco.variable2])
虽然效率低下,但效果很好。
使用此Google Cloud
Storage文档
,我一直在尝试使类似的工作正常进行:
def get(self):
filename = '/bucket/myfile.tsv'
datalist = MyEntity.all()
bucket_name = os.environ.get('BUCKET_NAME', app_identity.get_default_gcs_bucket_name())
write_retry_params = gcs.RetryParams(backoff_factor=1.1)
writer = csv.writer(self.response.out, delimiter='\t')
gcs_file = gcs.open(filename, 'w', content_type='text/csv', retry_params=write_retry_params)
gcs_file.write(writer.writerow(['field1', 'field2']))
for eachco in datalist:
gcs_file.write(writer.writerow([eachco.variable1, eachco.variable2]))
gcs_file.close()
但是我得到了:
TypeError: Expected str but got <type 'NoneType'>.
我以为csv.writer的输出将是一个字符串,所以我不确定为什么会收到TypeError。
所以我可以想到两种情况:
我将不胜感激!
编辑-完整回溯
Traceback (most recent call last):
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/mydirectory/myapp/handlers.py", line 21, in dispatch
webapp2.RequestHandler.dispatch(self)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/mydirectory/myapp/thisapp.py", line 384, in get
gcs_file.write(writer.writerow(['field1', 'field2']))
File "lib/cloudstorage/storage_api.py", line 754, in write
raise TypeError('Expected str but got %s.' % type(data))
TypeError: Expected str but got <type 'NoneType'>.
您仍在尝试根据响应创建作者:
writer = csv.writer(self.response.out, delimiter='\t')
您需要写入GCS文件。像这样:
datalist = MyEntity.all()
bucket_name = os.environ.get('BUCKET_NAME', app_identity.get_default_gcs_bucket_name())
filename = os.path.join(bucket_name, 'myfile.tsv')
write_retry_params = gcs.RetryParams(backoff_factor=1.1)
gcs_file = gcs.open(filename, 'w', content_type='text/csv', retry_params=write_retry_params)
writer = csv.writer(gcs_file, delimiter='\t')
writer.writerow(['field1', 'field2'])
for eachco in datalist:
writer.writerow([eachco.variable1, eachco.variable2])
gcs_file.close()
笔记:
bucket_name
get()
请求中执行此操作,则可能需要检查文件是否已存在,如果存在,请使用它,否则您仍会在每次请求时生成该文件。或者,您可以将此代码移至任务或.tsv
上载处理程序中。我正在尝试使用pyspark来分析我在数据砖笔记本上的数据。Blob 存储已装载到数据砖群集上,在分析后,希望将 csv 写回 blob 存储。由于 pyspark 以分布式方式工作,csv 文件被分解为小块并写入 Blob 存储。如何克服这个问题,并在我们使用pyspark进行分析时在blob上编写为单个csv文件。谢谢。
问题内容: 我有以下格式的数据: 我想将其写入CSV。下面是我的代码: 方法“ writeNext”仅允许使用String []作为参数。当我尝试使用Object []将’ArrayList each’强制转换为String []时,如下所示,我遇到了运行时类型强制转换错误: 谁能告诉我我要去哪里错了? 问题答案: 你不能投入,因为可以包含狗,猫,整型等。 您应该使用重载的List#toArray
问题内容: 我正在学习如何编写存储过程。我知道了,但我没有。我知道事情是这样的。 因此,我被困住了,我试图理解的是。编写一个存储过程,该过程接受一个Territory ID,Territory Description和Region ID,并将它们作为新行插入Northwind的Territories表中。 好吧,我知道我可以做这样的事情,我相信: 但是那我可能是错的。但我不知道在哪里插入然后作为表
我试图将一个用编写的函数迁移到 实时解压缩并逐行读取 对每一行执行一些光转换 将未压缩的输出(一次一行或块)写入GCS 输出是>2GB,但略小于3GB,所以它适合。 null AFAIC,我将坚持,因为输出可以放入内存--就目前而言--但是多部分上传是以最少的内存支持任何输出大小的方法。 想法还是替代方案?
问题内容: 我试图在Windows计算机上使用Python 3.2编写一个简单的CSV文件,但是我没有运气。从Python 3.2 的csv模块文档中: 产生一个文件,该文件的每一行都以字节序列结尾,因此当您使用MS Excel等打开文件时,每行看起来都有一个多余的空行。这不是“ CSV文件”。 请注意,如果我在Python 3.2中尝试相同的Python 2.7示例(最大的区别在于文件模式与vs
如何使用表(X)作为输入参数编写Oracle存储过程,并且在过程中使用表X与另一个表Y联接? 表X将有数千条记录。 不希望将表名传递为varchar,然后使用动态SQL(因此,此选项不在画面中)
CSV存储引擎使用逗号分隔值格式的文本文件存储数据。 要允许使用这个存储引擎,当你建立MySQL之时,使用--with-csv-storage-engine选项来configure。 当你创建一个CSV表之时,服务器在数据库目录创建一个表定义文件。文件由表的名字开始,并且由一个.frm的扩展名。存储引擎也创建一个数据文件。它的名字由表的名字开始,并且有一个.CSV的扩展名。数据文件是无格式文本文件
我在PHP中有一个CSV字符串,它被mb_detect_编码检测为UTF8。此字符串将写入文件。当我在文本编辑器(程序员记事本)中打开它时,编辑器会说它是UTF8无标记的,当我将编码更改为ANSI时,它会在Excel中正确打开。我想用ANSI编写这个文件,这样在Excel中打开它之前就不必在文本编辑器中进行转换。尝试使用以下命令: utf8_解码($xhtml) iconv(“UTF-8”、“Wi