2 回答
TA贡献1909条经验 获得超7个赞
您使用非常非常奇怪的方法来创建字符串。
您不需要将print()其作为字符串保存在变量中 - 所以您不需要io.String()
更流行的是将所有字符串保留在列表中,然后使用"\n"
all_rows = []
for row in query_job:
all_rows.append( "col1={}, col2={}, col3={}".format(row[0], row[1], row[2]) )
out1 = '\n'.join(all_rows)
哪个可以写成列表理解
all_rows = [ "col1={}, col2={}, col3={}".format(row[0], row[1], row[2]) for row in query_job ]
out1 = '\n'.join(all_rows)
不太流行的是直接使用 string with +=and\n
out1 = ""
for row in query_job:
out1 += "col1={}, col2={}, col3={}".format(row[0], row[1], row[2])
out1 += "\n"
你甚至可以"\n"直接输入"col1={}, col2={}, col3={}\n"
out1 = ""
for row in query_job:
out1 += "col1={}, col2={}, col3={}\n".format(row[0], row[1], row[2])
顺便说一句:如果你只有 3 个元素,row那么你可以使用*in.format(*row)
out1 = ""
for row in query_job:
out1 += "col1={}, col2={}, col3={}\n".format(*row)
或列表理解
all_rows = [ "col1={}, col2={}, col3={}".format(*row) for row in query_job ]
out1 = '\n'.join(all_rows)
甚至一行
out1 = '\n'.join([ "col1={}, col2={}, col3={}".format(*row) for row in query_job ])
顺便提一句:
如果您必须使用print()缓冲区(或文件处理程序),那么您不必更换,sys.stdout但您可以使用print(..., file=buffer)
buffer = io.StringIO()
for row in query_job:
print("col1={}, col2={}, col3={}".format(row[0], row[1], row[2]), file=buffer)
out1 = buffer.getvalue() #
但我不知道它是否适用于Transcrypt(and Wrangler),因为Transcrypt可能只有标准模块的一部分——只有可以转换为 JavaScript 的模块。某些函数可能无法转换,因为 JavaScript 无法访问您的磁盘(出于安全原因)并且它无法使用您的文件。
TA贡献1829条经验 获得超6个赞
能够修改以前使用 pandas 收集输出的(非常低效的)方法:
df = pd.read_gbq(sql, project_id=project_id)
我以前不知道的更快更简单的解决方案。目前仍然与 Transcrypt 不兼容,但至少这部分已解决。
添加回答
举报