0

作为我上一篇文章(数据排序)的后续,我想找出为什么我的 numpy 数组没有“添加”从文件夹中读取的新数据。上一篇文章解决了我以正确顺序读取文件的问题,但是当我从每个文件中读取数据并将它们添加到一个 numpy 数组中时 - 生成的数组没有指定顺序的数据。例如读取文件:

0129A.txt

0201A.txt

0210A.txt

0215A.txt 

在我的文件夹中从代码中正确读取(参见下面的列表),但最终产品 my_array(在代码中看到)没有按正确顺序排列每个文件的内容。这是我的示例代码:

datadirectory = '/media/DATA'
os.chdir(datadirectory)
listing = sorted(os.listdir(datadirectory))
my_array = np.zeros(shape=(0,3))

for infile in glob.glob('*.txt'):
    dataset = open(infile).readlines()
    data = np.genfromtxt(dataset, usecols=(0,1,2))
    lta = data
    my_array = np.vstack(my_array, lta)

我希望它读取的每个文件的代码创建 3 列数组(作为文本文件中的数据),然后移动到下一个文件(如清单中所定义)并以相同的顺序添加数据 - 但它确实不是。

我错过了什么?

4

1 回答 1

1

那不可能是你真正的代码——有一些明显的错别字(glob.blog例如)。请始终复制和粘贴。

但是假设您正在运行的代码使用glob.glob,那么您可能需要遍历结果的排序版本以获得您期望的顺序:

for infile in sorted(glob.glob("*.txt")):
    # do stuff here

这将按字典顺序排序(按“字母”顺序,因此“10”<“2”);sorted如果你想要别的东西,你可以传递一个关键函数。

示范:

~/coding/fill$ more *.txt
::::::::::::::
0129A.txt
::::::::::::::
1 2 3
1 2 3
1 2 3
::::::::::::::
0201A.txt
::::::::::::::
4 5 6
4 5 6
4 5 6

::::::::::::::
0210A.txt
::::::::::::::
7 8 9
7 8 9

::::::::::::::
0215A.txt
::::::::::::::
10 11 12
10 11 12
10 11 12

import os, glob
import numpy as np

datadirectory = '.'
os.chdir(datadirectory)
listing = sorted(os.listdir(datadirectory))
my_array = np.zeros(shape=(0,3))

for infile in sorted(glob.glob('*.txt')):
    dataset = open(infile).readlines()
    data = np.genfromtxt(dataset, usecols=(0,1,2))
    lta = data
    my_array = np.vstack([my_array, lta])

print my_array

给我

[[  1.   2.   3.]
 [  1.   2.   3.]
 [  1.   2.   3.]
 [  4.   5.   6.]
 [  4.   5.   6.]
 [  4.   5.   6.]
 [  7.   8.   9.]
 [  7.   8.   9.]
 [ 10.  11.  12.]
 [ 10.  11.  12.]
 [ 10.  11.  12.]]
于 2013-02-26T17:46:11.430 回答