Python中的字符串和行格式

时间:2014-01-28 16:45:38

标签: python string formatting line

我想让以下命令在python中格式化,在其他命令中遵守每行80个字符的策略:

cmd = """elastic-mapreduce --create --alive \
--instance-type m1.xlarge\
--num-instances 5 \
--supported-product mapr \
--name m7 \
--args "--edition,m7"
"""

虽然在代码中它看起来像多行,但当cmd执行时我希望它看起来像

elastic-mapreduce --create --alive --instance-type m1.xlarge --num-instances 5 supported-product mapr name m7 args "--edition,m7"

这是我在这里遇到的类似问题:

raise ValueError, "%s hadoop %s version is not supported" % (self.distribution, version)

那条线太长了,我想做点什么:

raise ValueError,\ 
"%s hadoop %s version is not supported" % (self.distribution, version)

2 个答案:

答案 0 :(得分:3)

至于你的第一个代码,你可以编写一个方法来“线性化”你的空白

 import re
 def linearize_whitespace_regex(text):
      formatted = text.strip().replace('\n',' ').replace('\r',' ').replace('\t',' ')
      formatted = re.sub(r'\s{2,}',' ',formatted)
      return formatted

我使用了正则表达式库,当然这可以在没有使用你自己的解析导入的情况下完成:

def linearize_whitespace_manual(text):
      formatted = text.strip().replace('\n',' ').replace('\r',' ').replace('\t',' ')
      ws_buf = ''
      format_buf = ''
      for i in formatted:
          if i == ' ':
                if len(ws_buf) < 1:
                    ws_buf += i
          else:
                format_buf += ws_buf + i
                ws_buf = ''
      return format_buf

并输出:

>>> cmd = """elastic-mapreduce --create --alive \
... --instance-type m1.xlarge\
... --num-instances 5 \
... --supported-product mapr \
... --name m7 \
... --args "--edition,m7"
... """
>>> linearize_whitespace_regex(cmd)
'elastic-mapreduce --create --alive --instance-type m1.xlarge--num-instances 5 --supported-product mapr --name m7 --args "--edition,m7"'
>>> linearize_whitespace_manual(cmd)
'elastic-mapreduce --create --alive --instance-type m1.xlarge--num-instances 5 --supported-product mapr --name m7 --args "--edition,m7"'

至于你提出的第二个问题,也可以这种方式提出例外:

raise Exception("My error message")

所以你可以这样写:

raise ValueError("%s hadoop %s version is not supported" % (self.distribution, version))

以上述任何方式满足您的生产线要求:

raise ValueError("%s hadoop %s version is not supported"
    % (self.distribution, version))


raise ValueError(
    "%s hadoop %s version is not supported" % (self.distribution, version))


raise ValueError(
     "%s hadoop %s version is not supported"
     % (self.distribution, version)
)

答案 1 :(得分:0)

添加\n应插入新行。