我正在尝试遍历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。我正在尝试提取第三列的最大值并将其附加到一个空列表中。
答案 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)