2016-10-25 20 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

相关问题