2016-12-01 43 views
0

如何捕捉空格周围的列中的元素?

300  january  10  20  
    300  februari 120,30 10  
    300  march  20,30  10  
    300,10  april  20,30 10  
    300  may   420,10 10,46 

我要重新排序列。
我做的第一件事是使用分隔符分隔文本之间的列。体育
(?<=\S)(\s{2,})(?=\S)
(?<=\S)(\s{1,})(?=\S)

然后我想放列在一个名单如下:

|300 | |january | | 10 | |20 | 
    |300 | |februari| |120,30| |10 | 
    |300 | |march | |20,30 | |10 | 
    |300,10| | april | | 20,30| |10 | 
    |300 | |may  | |420,10| |10,46| 

预期输出:

mylist = [['300 ','january ',' 10 ','20 '] 
      ['300 ','februari','120,30','10 '], 
      ['300 ','march ','20,30 ','10 '], 
      ['300,10',' april ',' 20,30','10 '], 
      ['300 ','may  ','420,10','10,46']] 

我不知道如何捕捉空间。

这个我试过使用分离后捕捉空间:

#find the max length of an element in a column 
lengte_temp = [[len(x) for x in row] for row in mylist] 
maxlengthcolumn = max(l[len(mylist[0])-1] for l in length_temp) 

#add spaces to elements 
for b in range(0,len(mylist)): 
    if length_temp[b][len(mylist[-1])-1] < maxlengthcolumn: 
    mylist[b][len(mylist[-1])-1] = mylist[b][len(mylist[-1])-1] + ' '*(maxlengthcolumn-length_temp[b][len(mylist[-1])-1]) 

,但一列中的元素在此之前删除的空间。

如何在上面的示例中捕获列表中的元素?

+0

的'csv'模块? –

+0

@Chris_Rands,在我看来,在我的例子中,csv模块并不尊重空格。 (它删除空格并加入字符串,之后在元素之间放置一定数量的空格) – Reman

+0

你不能只使用str.split()方法吗?如果我没有弄错,它会保留空间。 – Zafi

回答

1

假设您正在使用字符串,可以使用`ord'来获取ascii值,并将字符串和数字开头和结尾处的字符串拆分。

要打破它:(?从我读过它看起来像你的原始文本可能是一个.txt)

  1. 进水口时间一个文本每行导入您可以使用文件I/O方法(更多有关herehere
  2. 通行证每一行的字符串,并转换成使用ord() ASCII值,将这些值存储在一个单独的可变
  3. 设置逻辑上看到字/号码开始(你应该寻找一个alpha或数字模式,后跟0或更多的字母/数字(s)接着是空格,在这些空格之后,您应该找到另一个字母或数字。存储每个开始的位置(开头定义为字符串中的第一个,或者在一系列空格后跟随的第一个字母/数字)
  4. 索引您当前使用的文本行并提取所需的字符串。

这可能是不清楚的,所以请参阅下面的伪代码:

strings_start = [5, 12, 22] # this would be where the words/numbers begin in the string that holds a line of your text 
# we'll assume you have some variable, line, which holds the current line of the text you're parsing in a loop 
for i in range(len(strings_start)): 
    if i < len(strings_start) - 1 # subtract 1 because indexes start at 0 
     string_list[i] = line[i: i + 1] 
    else: 
     string_list[i] = line[i:]