在变量python中存储格式化文本

时间:2012-11-30 23:52:25

标签: python string text string-formatting

我正在尝试通过Python脚本编写脚本文件

为此我已经定义了一个打开,写入和放大的功能。关闭文件 def funcToCreateScript(filename,filecontent)

我有另一个函数,我在调用funcToCreateScript并尝试通过变量传递shell脚本内容。问题是我将文本格式化如下

def createfile():
    var = """#!/bin/sh
             echo ${test}
          """
    funcToCreateScript(filename,var)

我得到脚本的输出为 -

#!/bin/sh
         echo ${test}

因此,它采用函数的缩进并相应地编写它。有没有办法格式化它,使它看起来像

#!/bin/sh
echo ${test}

e.g。 -

def main():
    var = """
        #!/bin/sh
        echo ${test}
        """
    print var

main()

 > test.py

                #!/bin/sh
                echo ${test}

5 个答案:

答案 0 :(得分:3)

一种方法是使用textwrap.dedent

  

<强> textwrap.dedent( 文本

     

从文本的每一行中删除任何常见的前导空格。

     

这可以用来使三引号字符串与显示的左边缘对齐,同时仍然以缩进的形式在源代码中显示它们。

import textwrap

def createfile():
    var = """\
          #!/bin/sh
          echo ${test}
          """
    var = textwrap.dedent(var)
    funcToCreateScript(filename, var)

请注意,在打开三重引号后会立即插入\,以避免出现空行。

答案 1 :(得分:2)

这里有两个解决方案,要么使用新的换行符('\ n'),所以它看起来像:

def createfile():
    var = """#!/bin/sh\necho ${test}"""
    funcToCreateScript(filename,var)

请记住,如果您使用这种技术(这是一个非常讨厌的解决方案 - 请参阅下面的更好的替代方案),并且您希望看到print()所需的输出(假设这里有Python 3.0标准) )。

或者,只需做:

def createfile():
    involved. 
    var = """#!/bin/sh
echo ${test}
          """
    return funcToCreateScript(filename,var)

我不确定你是如何设置funcToCreateScript的,但这里有一些试用代码,所以你可以看到它的实际效果(复制并粘贴到交互式解释器或新的python文件并运行):

def createfile():
    var = """
#!/bin/sh
echo ${test}
          """
    return var

v = createfile()

如果你想获得幻想,但仍然让它可读,你可以使用lstrip(“”),这将从左侧删除所有空格。

def createfile():
    var = """#!/bin/sh
             echo ${test}
          """
    script_txt = ""

    for line in var:
        script_txt += line.lstrip(" ")

    return script_txt

v = createfile()

只是厌倦了最后一个解决方案,因为如果你有空白,你打算在那里,那么它将剥离它(我个人喜欢我列出的选项2)。

答案 2 :(得分:1)

如果变量的最后一行只包含空格,并且其长度是应该从除{1}之外的var行开头删除的空格数,请考虑如下代码:

v = var.split('\n')
s = len(v[-1])
var = v[0]+'\n'+'\n'.join(map(lambda x: x[s:], v[1:]))

这会从第一行以外的行前面删除s个额外字符。如果使用制表符进行某些对齐,则上述操作可能会导致问题;可能想要使用字符串替换而不是数组切片。

答案 3 :(得分:0)

试试这个:

var = """#!/bin/sh\necho ${test}"""

答案 4 :(得分:0)

另一种选择 - 隐式连接:

def createfile():
    var = (
        "#!/bin/sh\n"
        "echo ${test}"
    )