python - Python 中的字符串和行格式

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

最佳答案

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

 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"'

至于你的第二个问题,提出异常(exception)也可以通过这种方式完成:

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)
)

关于python - Python 中的字符串和行格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21411660/

相关文章:

python - 单元测试不会运行测试

带有长 if 谓词的 Python 风格

C# 文本框行距

c - 如何在for循环中使用scanf

python - 在 python 中运行复杂的命令行

ios - Swift - 按钮中的属性字符串

java - 在我的例子中如何使用replaceFirst()来获取一系列连续的字符串?

python - python中的函数用于在大文件中搜索特定名称的可能组合

intellij-idea - 如何更改 IntelliJ IDEA 中制表符的外观?

java - 如何在java中读取使用python的struct.pack方法编写的字符串