我正在尝试使用变量格式化下面的字符串以便于阅读,我想将其分解以便更容易阅读,现在它在脚本行中占用了199个字符,我所做的每一次尝试似乎都将其分解印刷时它有很大的间隙,任何人都可以摆脱一些光线吗?我试着将它包装在"""最后三重引号和\但在打印或记录时仍有空格。
copy_sql = "COPY {0} FROM 's3://{1}/{2}' CREDENTIALS 'aws_access_key_id={3};aws_secret_access_key={4}' {5}; ".format(table_name,bucket,key,aws_access_key_id,aws_secret_access_key,options)
期望的结果会对此产生影响:
copy_sql = "COPY {0} FROM 's3://{1}/{2}' \
CREDENTIALS 'aws_access_key_id={3};aws_secret_access_key={4}' {5}; \
".format(table_name,bucket,key, \
aws_access_key_id,aws_secret_access_key,options)
然而,当我打印它时,我在.gz和凭证之间获得了很大的空间:
COPY analytics.table FROM 's3://redshift-fake/storage/2017-11-02/part-00000.gz' CREDENTIALS 'aws_access_key_id=SECRET;aws_secret_access_key=SECRET' DELIMITER '\t' dateformat 'auto' fillrecord removequotes gzip;
我认为这仍然可行,但我想清理它以便记录可读性。
答案 0 :(得分:2)
您可以使用string literal concatenation:
允许使用多个相邻的字符串文字(由空格分隔),可能使用不同的引用约定,并且它们的含义与它们的连接相同。因此,
"hello" 'world'
相当于"helloworld"
。
在你的情况下,像这样:
copy_sql = ("COPY {0} FROM 's3://{1}/{2}' "
"CREDENTIALS 'aws_access_key_id={3};aws_secret_access_key={4}' {5};"
).format(table_name,bucket,key,
aws_access_key_id,aws_secret_access_key,options)
请注意额外的括号以使其正确解析。只要行结尾位于至少一对空格中,Python就会将其视为行连续,而不需要反斜杠。