numpy - Python - 有选择地导入.txt文件的一部分

时间:2013-05-29 02:23:24

标签: python numpy analysis

在我的data.txt文件中,有两种类型的行。

  1. 正常数据:16个数字用空格分隔,末尾附加'\ n'。

  2. 不完整数据:在将数据写入data.txt的过程中,最后一行的写入总是被STOP命令中断。因此,它总是不完整的,例如,它可以有10个数字而没有'\ n'

  3. 两个问题:

    一个。如何导入整个文件除了最后一行不完整的行?

    我注意到了

    # Load the .txt file in
    myData = np.loadtxt('twenty_z_up.txt')
    

    非常“严格”,因为当存在最后一条不完整的行时,无法导入该文件。导入的.txt文件必须是一个很好的矩阵。

    b。有时,我会在第一个条目的入口处设置时间戳以用于实验目的。假设我在第2行开头有第一个时间戳,在第5行开头有第二个时间戳。如何只从第2行到第5行导入Python?

    ===============================更新:Qa解决了=========== =====================

    myData = np.genfromtxt('fast_walking_pocket.txt', skip_footer=1)
    

    将有助于丢弃最终的不完整行

3 个答案:

答案 0 :(得分:3)

您可以尝试pandas,它提供了一个使用函数read_csv来更轻松地加载数据。

示例数据:

a b c d e f g h i j k l m n o p
a b c d e f g h i j k l m n o p
a b c d e f g h i j k l m n o p
a b c d e f g h i j k l m n o p
a b c d e f g h i j k l m n o p
a b c d e f g h i j

对于Q1,您可以通过以下方式加载数据:

In [27]: import pandas as pd

In [28]: df = pd.read_csv('test.txt', sep=' ', header=None, skipfooter=1)

DataFrame是一个有用的结构,可以帮助您 过程数据更容易。要获得numpy数组,只需获取values的{​​{1}}属性。

DataFrame

对于你的Q2,你可以通过

得到第二行和第五行
In [33]: df.values
Out[33]: 
array([['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
        'n', 'o', 'p'],
       ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
        'n', 'o', 'p'],
       ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
        'n', 'o', 'p'],
       ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
        'n', 'o', 'p'],
       ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
        'n', 'o', 'p']], dtype=object)

答案 1 :(得分:1)

回答你的'b'问题。

假设你有这个文件(名为'/tmp/lines.txt'):

line 1
2013:10:15
line 3
line 4
2010:8:15
line 6 

您可以使用linecache模块:

>>> import linecache
>>> linecache.getline('/tmp/lines.txt', 2)
'2013:10:15\n'

所以你可以直接解析这个时间:

>>> import datetime as dt
>>>dt.datetime.strptime(linecache.getline('/tmp/lines.txt',2).strip(),'%Y:%m:%d')
datetime.datetime(2013, 10, 15, 0, 0)

修改

多行:

>>> li=[]
>>> for i in (2,5):
...    li.append(linecache.getline('/tmp/lines.txt', i).strip())
... 
>>> li
['2013:10:15', '2010:8:15']

或者:

>>> lines={}
>>> for i in (2,5):
...    lines[i]=linecache.getline('/tmp/lines.txt', i).strip()
... 
>>> lines
{2: '2013:10:15', 5: '2010:8:15'}

或范围:

>>> lines={}
>>> for i in range(2,6):
...    lines[i]=linecache.getline('/tmp/lines.txt', i).strip()
... 
>>> lines
{2: '2013:10:15', 3: 'line 3', 4: 'line 4', 5: '2010:8:15'}

答案 2 :(得分:1)

问题a:

np.genfromtxt('twenty_z_up.txt',skip_footer=1)

Qustion b:

np.genfromtxt('twenty_z_up.txt',skip_footer=1)[2:5]