2017-11-11 78 views
1

我想格式化下面的字符串與變量的可讀性,我想打破它,所以它更容易閱讀,現在它佔用了腳本行中的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) 

然而,當我打印出來,我得到。廣州和憑證之間的大空間。

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

只要把「CREDETIALS」放在行首 –

+0

雖然有效,但它仍然很難看,如果可能的話,我會盡量保持清潔。 – jaysunn

回答

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將始終將其視爲一行續行,而不需要反斜槓。

+0

非常感謝您鏈接到文檔並提供示例,這正是我所期待的。 – jaysunn