python - 设置字符串格式以方便阅读和打印

标签 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;

我认为这仍然有效,但我想清理它以提高日志记录的可读性。

最佳答案

您可以使用string literal concatenation :

Multiple adjacent string literals (delimited by whitespace), possibly using different quoting conventions, are allowed, and their meaning is the same as their concatenation. Thus, "hello" 'world' is equivalent to "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 就会始终将其视为行继续,而不需要反斜杠。

关于python - 设置字符串格式以方便阅读和打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47239393/

相关文章:

python - Django 类 View : __init__

python - 带有模型继承的 Django 索引

python - 将行值解析为列并用于查找值

python - 根据重复的单词拆分现有列表

python - 处理Python中的记录器错误

python - 使用 Numpy 将数组分区为 N 个 block

python - 如何在不检查空行的情况下循环直到 Python 中的文件末尾?

python - 如何从Python中的日期字符串生成范围日期?

python-2.7 - 如何使用 python2 运行时和 antlr4 打印解析树

Python 拆分包含列表的字符串