从文本文件中提取列并以特定格式放入新文本文件。

时间:2016-01-04 04:32:01

标签: python excel vba excel-vba

我在文本文件中有以下格式的数据。第一行表示时间步长。第一列表示位置,接下来的四列表示该位置的不同值。

0.017
    1   0.11    0.40    0.02    0.73
    2   0.86    0.86    0.30    0.25
    3   0.95    0.20    0.50    0.71
    4   0.68    0.93    0.07    0.78
    5   0.65    0.80    0.75    0.46
    6   0.16    0.37    0.89    0.69
    7   0.22    0.50    0.66    0.63
    8   1.00    0.17    0.95    0.65
    9   0.12    0.45    0.56    0.05
    10  0.67    0.73    0.48    0.33
0.034                   
    1   0.19    0.91    0.11    0.69
    .
    .
    .

我需要在新的文本文件中使用以下格式。

TS 1 0.017
1
2
3
4
5
6
7
8
9
10
0.11
0.86
0.95
0.68
0.65
0.16
0.22
1.00
0.12
0.67
TS 1 0.034
1
.
.
0.19

我需要每次在第一行的时间步骤中添加“TS 1”。然后,我需要按顺序列出所有位置(在这种情况下为1-10),然后按照与下面位置相同的顺序列出第2列中的值。

我需要这个迭代多个时间步骤,直到文本文件的末尾可以是数百万行。我希望在Excel中使用Python或VBA完成此操作。关于如何开始的任何想法?

1 个答案:

答案 0 :(得分:0)

#!/usr/bin/env python
# coding: utf-8

import re

SPACE = re.compile(ur'\s+')


def write_rows(f, rows):
    if rows:
        for row in rows:
            f.write(row[0])
            f.write('\n')
        for row in rows:
            f.write(row[1])
            f.write('\n')

with open('in.txt', 'r') as fi:
    with open('out.txt', 'w') as fo:
        rows = []
        for line in fi:
            bits = SPACE.split(line.strip())
            if len(bits) == 1:
                write_rows(fo, rows)
                fo.write('TS 1 ')
                fo.write(bits[0])
                fo.write('\n')
                rows = []
            else:
                rows.append(bits)

        write_rows(fo, rows)