如何使用numpy遍历.txt文件列表?

时间:2019-06-17 16:25:58

标签: python numpy

我正在尝试遍历Python中.txt个文件的列表。我想分别加载每个文件,创建一个数组,在每个数组的特定列中找到最大值,然后将其附加到一个空列表中。每个文件都有三列,没有标题,也没有数字。

我的问题是开始迭代。我收到了诸如“没有这样的文件或目录”之类的错误消息,然后在列表中显示第一个.txt文件的名称。

我使用os.listdir()在我正在使用的目录中显示每个文件。我将其分配给变量filenamelist,我正试图对其进行迭代。

这是我进行迭代的尝试之一:

for f in filenamelist:
    x, y, z = np.array(f)
    currentlist.append(max(z))

我希望它为每个文件创建一个数组,找到第三列的最大值(已分配给z),然后将其附加到一个空列表中,然后移至下一个文件。

编辑:这是我到目前为止编写的代码:

import os
import numpy as np
from glob import glob

path = 'C://Users//chand//06072019'
filenamelist = os.listdir(path)
currentlist = []
for f in filenamelist:
    file_array = np.fromfile(f, sep=",")
    z_column = file_array[:,2]
    max_z = z_column.max()
    currentlist.append(max_z)

编辑2:这是我要从中提取值的一个文件的片段:

0,           0.996,    0.031719
5.00E-08,    0.996,    0.018125
0.0000001,   0.996,    0.028125
1.50E-07,    0.996,    0.024063
0.0000002,   0.996,    0.023906
2.50E-07,    0.996,    0.02375
0.0000003,   0.996,    0.026406

每列的长度为1000。我正在尝试提取第三列的最大值并将其附加到一个空列表中。

1 个答案:

答案 0 :(得分:0)

主要问题是np.array(filename)不会为您加载文件。根据文件的格式,类似np.loadtxt()的东西可以解决问题(请参见docs)。

编辑:正如其他人所提到的,您的实现还有另一个问题。 os.listdir()返回文件名 的列表,但是您需要文件 paths 。您可以使用os.path.join()来获取所需的路径。

下面是一个示例,说明了如何执行所需操作,但这实际上取决于文件格式。在此示例中,我假设使用CSV(逗号分隔)文件。

示例输入文件:

1,2,3
4,5,6

示例代码:

path = 'C://Users//chand//06072019'
filenames = os.listdir(path)
currentlist = []

for f in filenames:
    # get the full path of the filename
    filepath = os.path.join(path, f)
    # load the file
    file_array = np.loadtxt(filepath, delimiter=',')
    # get the whole third column
    z_column = file_array[:,2]
    # get the max of that column
    max_z = z_column.max()
    # add the max to our list
    currentlist.append(max_z)