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 に答える