在python中用通配符分隔字符串

时间:2013-12-12 17:06:04

标签: python string partition

我有一个看起来像

的文件
 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

我应该为通配符添加什么内容?

4 个答案:

答案 0 :(得分:6)

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

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

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

答案 1 :(得分:5)

你可以使用,

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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