2016-10-25 21 views
-1

私はPythonには少し新しく、ファイルの書式を設定する助けを望んでいます。私は現在、次のように見えるファイルで働いている:最初の列は、行番号2列を表すPython - BEDファイルへの配列の整形

3 5 
    3 6 
    3 7 
    3 8 
    3 12 
    3 13 
    3 14 
    5 1 
    5 2 
    5 3 

は行列の列数を表します。私はこのファイルを次のように再フォーマットしようとしています:

3 5 8 
    3 12 14 
    5 1 3 

どうすればいいですか?これを実行したいファイルは10行よりはるかに大きいですが、これは私のコードをテストするための例です。

答えて

0

これはpython questionとされていましたが、algorithm problemのように見えます。次回はあなたのアルゴリズムを私たちに持ってきて、私たちはあなたがpythonのためにそれを書くのを助けることができます。


このアルゴリズムは、あなたの問題のために最善の解決策ではないかもしれないが、何ができるかのpythonあなたが表示されます:ここでは

long_text = '''3 5 
3 6 
3 7 
3 8 
3 12 
3 13 
3 14 
5 1 
5 2 
5 3''' 

lines = long_text.split('\n') 

last_row = -1 
last_column = -1 
add_one = True 

formatted_text = '' 

for line in lines: 
    row, column = line.split(' ') 
    row = row 
    column = column 
    if row == last_row: 
     if int(column) == int(last_column) + 1: 
      if add_one: 
       formatted_text = '{} {}'.format(formatted_text, column) 
       add_one = False 
      else: 
       formatted_text = formatted_text[:-(len(last_column)+1)] 
       formatted_text = '{} {}'.format(formatted_text, column) 
     else: 
      formatted_text = '{}\n{} {}'.format(formatted_text, row, 
      column) 
      add_one = True 
    else: 
     formatted_text = '{}\n{} {}'.format(formatted_text, row, column) 
     add_one = True 
    last_row = row 
    last_column = column 

print (formatted_text) 

ではなく、リストを使用して、同じアルゴリズムを、以下:

long_text = '''3 5 
3 6 
3 7 
3 8 
3 12 
3 13 
3 14 
5 1 
5 2 
5 3''' 

lines = long_text.split('\n') 

last_row = -1 
last_column = -1 
add_one = True 

formatted_list = [] 

for line in lines: 
    row, column = line.split(' ') 
    row = int(row) 
    column = int(column) 
    if row == last_row: 
     if column == last_column + 1: 
      if add_one: 
       formatted_list.append(column) 
       add_one = False 
      else: 
       formatted_list.pop(-1) 
       formatted_list.append(column) 
     else: 
      formatted_list.append('\n') 
      formatted_list.append(row) 
      formatted_list.append(column) 
      add_one = True 
    else: 
     formatted_list.append('\n') 
     formatted_list.append(row) 
     formatted_list.append(column) 
     add_one = True 
    last_row = row 
    last_column = column 

formatted_text = '' 
for element in formatted_list: 
    formatted_text = '{} {}'.format(formatted_text, element) 

print (formatted_text) 

add_oneは最後の列を削除する必要があるかどうかを確認するために使用されるため、3 5 6 7 8ではなく3 5 8が出力されます。

+0

^それは私が探していたものです。ありがとうございました!間違った場所に投稿して申し訳ありません。 – scottdet

関連する問題