0

我有一个具有以下格式的数据文本文件:

1 2 2 3 4 5 6
1 5 8 9 3 4 2
1 2 3 5 1 2 3     
Timestamp 1   
5 4 8 9 8 7 2 
1 5 9 6 3 1 2
Timestamp 2
...

我希望以如下方式导入数据:

  1. 我可以先忽略时间戳并处理数据。
  2. 而且我也可以稍后处理时间戳。

我已经达到了 1

myData = np.genfromtxt('data.txt', comments='T')

通过这样做,我在 Python 中有以下内容

    1 2 2 3 4 5 6
    1 5 8 9 3 4 2
    1 2 3 5 1 2 3 
    5 4 8 9 8 7 2 
    1 5 9 6 3 1 2

但是,通过这样做,我只是丢弃了所有时间戳。

但我也需要稍后处理它们。

如何在 Python 中将时间戳导入另一个列表,如下所示?

Timestamp 1
Timestamp 2
...
4

2 回答 2

3

这个怎么样?

我假设时间戳之前的数字是属于它的数字:

此代码段还将数字转换为整数。

代码:

with open('source.txt', 'r') as f:
    data = {}
    numbers = []
    for line in f:
        ln = line.strip()
        if 'Timestamp' in ln:
            data[ln] = numbers
            numbers = []
        elif ln:
            numbers.append([int(n) for n in ln.split()])

print(data)

输出:

{
    'Timestamp 2':
    [
        [5, 4, 8, 9, 8, 7, 2],
        [1, 5, 9, 6, 3, 1, 2]
    ],
    'Timestamp 1':
    [
        [1, 2, 2, 3, 4, 5, 6],
        [1, 5, 8, 9, 3, 4, 2],
        [1, 2, 3, 5, 1, 2, 3]
    ]
}
于 2013-08-12T01:05:03.307 回答
1

@PeterVaro 有一个很好的解决方案,可以将时间戳链接到数据,但如果您只想将数字和时间戳导入单独的列表中,您可以这样做:

with open('data.txt') as dataFile:
    numbers = []
    timestamps = []
    for line in dataFile:
        # if statement makes sure it's not a blank line with only a newline character in it.
        if len(line) > 1:
            if 'Timestamp' in line:
                timestamps.append(line.rstrip())
            else:
                numbers.append([int(x) for x in line.split()])

for line in numbers:
    for number in line:
        print number, " ",
    print

print

for timestamp in timestamps:
    print timestamp

输出:

1   2   2   3   4   5   6  
1   5   8   9   3   4   2  
1   2   3   5   1   2   3  
5   4   8   9   8   7   2  
1   5   9   6   3   1   2  

Timestamp 1
Timestamp 2
于 2013-08-12T01:28:54.817 回答