2

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

  1. 普通数据:由空格分隔的 16 个数字,末尾附加“\n”。

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

两个问题:

一个。除了最后一个不完整的行之外,如何将整个文件导入 Python?

我注意到

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

从某种意义上说,当最后一个不完整的行存在时,文件无法导入,这是相当“严格”的。导入的 .txt 文件必须是一个很好的矩阵。

湾。有时,出于实验目的,我会在一行的第一个条目上制作时间戳。假设我在第 2 行开头有我的第一个时间戳,在第 5 行开头有我的第二个时间戳。如何仅从第 2 行到第 5 行导入 Python?

================================ 更新:Qa 已解决 ============== ===================

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

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

4

3 回答 3

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获取DataFrame.

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)

对于您的 Q2,您可以通过

In [36]: df.ix[[1, 4]]
Out[36]:
  0  1  2  3  4  5  6  7  8  9  10 11 12 13 14 15
1  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p
4  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p
于 2013-05-29T03:31:24.113 回答
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'}
于 2013-05-29T03:30:10.787 回答
1

问题一:

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

问题 b:

np.genfromtxt('twenty_z_up.txt',skip_footer=1)[2:5]
于 2013-05-31T14:02:49.747 回答