字符串拆分类似于Python中的sscanf

时间:2015-05-21 15:43:18

标签: python split

我有一个包含

等行的文件
12  45 some text
56 78      #another type of text
22     34 after column 2 are other data

我需要将存储两个第一个元素的每一行拆分为两个变量,将第二列之后的文本拆分为一个变量。在C中,使用sscanf()可以实现

sscanf(line,"%d %d %s",&a,&b,textArray);

我知道scanf python module,但显然它不是标准的,并且不包含在Debian中。

如何使用标准Python工具执行此操作?

2 个答案:

答案 0 :(得分:0)

假设你的第一个字符串元素是数字我会建议像

def split(line):

  list0= line.split()
  list1 = [y for y in list0 if y.isdigit() ]
  rest = ' '.join([c for c in list0 if c not in list1[:2]])

  a = list1[0]
  b = list1[2]
  return a,b,rest

# ex:

print split('22     34 after column 2 are other data')

# output >> ('22', '2', 'after column 2 are other data')

答案 1 :(得分:0)

split就是你所需要的。

 line.split(None, 2)

重点分歧的文档补充说:

  

string.split(s [,sep [,maxsplit]])

     

返回字符串s的单词列表。 如果可选的第二个参数sep不存在或者None,则单词由空格字符的任意字符串(空格,制表符,换行符,返回值,换页符)分隔。如果第二个参数sep存在而不是None ,它指定一个字符串用作单词分隔符。然后,返回的列表将比字符串中分隔符的非重叠出现次数多一个项目。如果给出maxsplit,则最多发生maxsplit分割数,并且字符串的其余部分作为列表的最后一个元素返回(因此,列表最多只有maxsplit + 1个元素)。如果未指定maxsplit或-1,则对分割数量没有限制(所有可能的分割都会生成)。

     

拆分空字符串的行为取决于sep的值。如果未指定sep或指定为None,则结果将为空列表。如果将sep指定为任何字符串,则结果将是包含一个空字符串元素的列表。