【问题标题】:Python script using import RE to put list of words into bracket使用 import RE 将单词列表放入括号的 Python 脚本
【发布时间】:2016-05-29 20:15:24
【问题描述】:

我在下面写了python脚本:

import re


mystr = """


MA1-ETLP-01
MA1-ETLP-02
MA1-ETLP-03
MA1-ETLP-04
MA1-ETLP-05

"""
wordList = re.sub("[^\w]"," ",mystr).split()

print wordList

当我运行脚本时,它会给我一个输出:

-MacBook-Pro-2:FinalizedPythonScripts e0126914$ python OpenFileAndFormat.py 

    ['MA1', 'ETLP', '01', 'MA1', 'ETLP', '02', 'MA1', 'ETLP',
     '03', 'MA1', 'ETLP', '04', 'MA1', 'ETLP', '05']

我想让它看起来更像

['MA1-ETLP-01', 'MA1-ETLP-02', 'MA1-ETLP-03', 'MA1-ETLP-04', 'MA1-ETLP-05']

谁能帮我修复我的 Python 脚本,让它看起来更像第二个输出?

【问题讨论】:

  • 你为什么要使用re
  • “将单词列表放入括号”,您的意思是“制作列表”吗?
  • mystr 实际上是从哪里来的?
  • re.sub("[^\w]"," ",mystr) 用空格替换破折号(因为它们不是单词字符)。 split() 没有参数会在空格上拆分,因此是您的结果。
  • 我正在尝试将其转换为该格式,以便将其插入到我的 fabfile 中,因此 env.hosts 部分需要该格式

标签: python import


【解决方案1】:

您不需要正则表达式。只需将字符串发送到split()

>>> mystr = """
...
...
... MA1-ETLP-01
... MA1-ETLP-02
... MA1-ETLP-03
... MA1-ETLP-04
... MA1-ETLP-05
...
... """
>>> mystr.split()
['MA1-ETLP-01', 'MA1-ETLP-02', 'MA1-ETLP-03', 'MA1-ETLP-04', 'MA1-ETLP-05']

【讨论】:

    【解决方案2】:

    以下方法可以解决问题:

    mystr.split()
    

    【讨论】:

      【解决方案3】:

      如果你可以在行中有空格,你会想要 splitlines 而不是 split 并过滤空行:

      mystr = """
      
      
      MA1-ETLP-01
      MA1-ETLP-02
      MA1-ETLP-03
      MA1-ETLP-04
      MA1-ETLP-05
      
      """
      
      print([line for line in mystr.splitlines() if line])
      

      根据脚本名称OpenFileAndFormat,您似乎正在从一个文件中读取,如果您不需要拆分任何内容,您可以逐行读取到一个列表中,去除换行符并过滤空行:

      with open("your_file") as f:
          lines = [line for line in map(str.strip, f) if line]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-10
        • 2023-03-30
        • 1970-01-01
        • 2021-02-02
        • 1970-01-01
        相关资源
        最近更新 更多