格式化字符串以提高可读性和打印

时间:2017-11-11 15:12:09

标签: python python-2.7

我正在尝试使用变量格式化下面的字符串以便于阅读,我想将其分解以便更容易阅读,现在它在脚本行中占用了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;

我认为这仍然可行,但我想清理它以便记录可读性。

1 个答案:

答案 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就会将其视为行连续,而不需要反斜杠。