【问题标题】:Separate a string by a wildcard in python在python中用通配符分隔字符串
【发布时间】:2013-12-31 05:29:10
【问题描述】:

我有一个看起来像这样的文件

 12 MG   -5.000000000000E-01 -5.000000000000E-01  0.000000000000E+00
 16 S     1.558454815345E-01  1.558454815345E-01  2.500000000000E-01
  8 O     2.189546044408E-01 -1.271822846411E-01  4.012978695812E-01

我想从行的前面分离出数字,输出为

MG   -5.000000000000E-01 -5.000000000000E-01  0.000000000000E+00
S     1.558454815345E-01  1.558454815345E-01  2.500000000000E-01
O     2.189546044408E-01 -1.271822846411E-01  4.012978695812E-01

我有这个

for line in file:
    head, sep, tail = line.partition('wildcard')
    print tail

我应该为通配符输入什么?

【问题讨论】:

  • 对我来说这看起来像是一种固定宽度的格式;你能确认第三行比前两行多了一个空格吗?

标签: python string partition


【解决方案1】:

您的格式看起来像固定列格式,其中每一列的宽度都是固定的。

如果是这样,请改用切片:

for line in file:
    print line[4:]

切掉前 4 个字符。

或者,在空白处拆分一次,将 None 参数传递给 str.split()

for line in file:
    tail = line.split(None, 1)[-1]
    print tail

str.split(None) 跳过 字符串开头的空格,并在第一列之后的第一个空格字符序列上分割。 [-1] 取最后一个元素;即使该行不超过一列,您也会得到结果。

演示:

>>> line = ' 16 S     1.558454815345E-01  1.558454815345E-01  2.500000000000E-01\n'
>>> line.split(None, 1)
['16', 'S     1.558454815345E-01  1.558454815345E-01  2.500000000000E-01\n']

【讨论】:

    【解决方案2】:

    你可以使用,

    head, sep, tail = line.strip().partition(" ")
    

    整个程序变成这样

    with open("Input.txt") as inFile:
        for line in inFile:
            print line.strip().partition(" ")[2]
    

    输出

    MG   -5.000000000000E-01 -5.000000000000E-01  0.000000000000E+00
    S     1.558454815345E-01  1.558454815345E-01  2.500000000000E-01
    O     2.189546044408E-01 -1.271822846411E-01  4.012978695812E-01
    

    【讨论】:

      【解决方案3】:
      text = '''12 MG   -5.000000000000E-01 -5.000000000000E-01  0.000000000000E+00
       16 S     1.558454815345E-01  1.558454815345E-01  2.500000000000E-01
        8 O     2.189546044408E-01 -1.271822846411E-01  4.012978695812E-01'''
      
      
      for line in text.splitlines():
          print line.split(None,1)[1]
      

      结果

      MG   -5.000000000000E-01 -5.000000000000E-01  0.000000000000E+00
      S     1.558454815345E-01  1.558454815345E-01  2.500000000000E-01
      O     2.189546044408E-01 -1.271822846411E-01  4.012978695812E-01
      

      【讨论】:

        【解决方案4】:

        您也可以使用库来代替自己做:NumPy 的 I/O 例程 (loadtxt) 对于解析此类文件非常有用。

        在您的情况下,您必须指定记录数据类型(dtype 参数,请参阅numpy.loadtxt)。

        【讨论】:

          猜你喜欢
          • 2011-03-29
          • 1970-01-01
          • 2021-06-12
          • 1970-01-01
          • 2020-07-31
          • 2017-03-25
          • 2014-03-29
          • 2018-05-05
          • 2015-02-28
          相关资源
          最近更新 更多