2016-10-25 49 views
-1

我對Python有點新,希望能幫助格式化文件。我目前正在與(如下所示)文件的工作: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編寫它。


這種算法可能不是你的問題的最佳解決方案,但它會告訴你什麼蟒蛇可以這樣做:

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 8而不是3 5 6 7 8

+0

^這正是我所期待的。謝謝!對不起,張貼在錯誤的地方。 – scottdet

相關問題