2016-12-01 44 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:]