Python - 将数组格式化为BED文件

时间:2016-10-25 20:23:52

标签: python format

我对python有点新,希望能帮助格式化文件。我目前正在处理如下文件:

    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行大得多,这只是我一直在用来测试我的代码的一个例子。

1 个答案:

答案 0 :(得分: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)

以下是SAME算法,改为使用list:

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