2016-12-01 10 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 

私は列の順序を変更したいです。
まず、セパレータを使用してテキスト間の列を区切ります。 p.e.
(?<=\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']] 

私はキャプチャする方法見当がつかないスペース。

I、セパレータの使用後にスペースをキャプチャするためにこの試み:

#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値を取得し、英字と数字の前後で文字列を分割することができます。

  1. 摂取テキスト1の各行を一度にあなたがファイルIを使用することができますインポートする(私はあなたの元のテキストが.txtのかもしれないように見える読んだから?):それを打破するには

    文字列として/ O方法(そのherehere詳細)

  2. 峠各ラインや言葉/数字は(あなたを始める場所を確認するためのロジックを設定し、別の変数
  3. でこれらの値を保存し、ord()を使用してASCII値に変換しますアルファまたは数字のパターンを探していなければなりません。数字の後ろにアルファベットまたは数字のアルファベットが続きます。空白が続き、一連の空白の後に別のアルファまたは数字があるはずです。文字列中の最初のアルファベット/数字で始まり、一連のスペースの後ろに続く最初のアルファベット/数字で始まる各始点の位置を格納します。
  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:] 
関連する問題