1

我正在尝试用 Python 处理一些数据,但是遇到了很多困难(考虑到我还是个菜鸟)。我从其他问题/网站中获取了一些代码,但仍然不能完全得到我想要的。

基本上我需要的是获取一组数据文件并从每个文件的一个特定行中选择数据,然后将其放入一个新文件中以便我可以绘制它。

因此,为了首先将数据导入 Python,我尝试使用:

data = []
path = C:/path/to/file
for files in glob.glob(os.path.join(path, ‘*.*’)):
  data.append(list(numpy.loadtxt(files, skiprows=34))) #first 34 rows aren't used

这曾经对我很有用,但由于某种原因,它现在不起作用。有什么可能的原因吗?

无论如何,继续,这应该给我一个包含所有数据的二维列表。

接下来我想从每个数据集中选择某一行,可以使用:

x = list(xrange(30)) #since there are 30 files

然后:

rowdata = list(data[i][some particular row] for i in x)

这给了我一个列表,其中包含每个导入文件中该特定行的值。这部分似乎工作得很好。

最后,我想将其写入文件。我已经试了:

f = open('path/to/file', 'w')
   for item in rowdata:
      f.write(item)
f.close()

但我不断收到错误消息。这里有另一种方法吗?

4

2 回答 2

0

如果您只需要从文件中读取并写入文件,则可以使用 open()。

为了获得更好的解决方案,您可以使用linecache

于 2013-05-01T17:09:12.260 回答
0

您已经在使用 numpy 来加载文本,您也可以使用它来操作它。

import numpy as np
path = 'C:/path/to/file'
mydata = np.array([np.loadtxt(f) for f in glob.glob(os.path.join(path, '*.*'))])

这会将所有数据加载到一个 3d 数组中:

mydata.ndim
#3

其中第一个维度(轴)在文件上运行,第二个在行上,第三个在列上:

mydata.shape
#(number of files, number of rows in each file, number of columns in each file)

因此,您可以通过以下方式访问第一个文件

mydata[0,...]   # equivalent to: mydata[0,:,:]

或所有文件的特定部分:

mydata[0,34,:]    #the 35th row of the first file by
mydata[:,34,:]    #the 35th row in all files
mydata[:,34,1]    #the second value in the 34th row in all files

写入文件:
假设您要写入一个仅包含所有文件第 35 行的新文件:

np.savetxt(os.join(path,'outfile.txt'), mydata[:,34,:])
于 2013-05-01T17:31:50.397 回答