【问题标题】:Order of numpy list from imported text files导入文本文件中 numpy 列表的顺序
【发布时间】:2013-02-26 16:33:18
【问题描述】:

作为我之前帖子(sort data) 的后续,我想找出为什么我的 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 列数组(作为文本文件中的数据),然后移动到下一个文件(如清单中所定义)并以相同的顺序添加数据 -但事实并非如此。

我错过了什么?

【问题讨论】:

    标签: python arrays sorting numpy text-files


    【解决方案1】:

    这不可能是您的真实代码——有一些明显的拼写错误(例如glob.blog)。请始终复制和粘贴。

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

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

    这将按字典顺序排序(按“字母”顺序,因此“10”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.]]
    

    【讨论】:

    • 感谢您注意到错别字 - 我更正了我发现的 2 个(我的脚本更复杂,我只想发布一个更简单的版本) - 我已经对列表进行了排序,但甚至在 glob 之前添加了排序(就像你建议的那样)仍然得到相同的不一致(与订单)结果
    • 感谢演示 - 我可以看到它有效,当我查看我的数据时可能也在那里工作(我会在验证时将答案更新为正确) - 所以必须有另一个我的代码有问题.....
    • 你是对的;数组中的数据顺序正确;问题在于其中一项功能 - 调查它
    猜你喜欢
    • 2014-09-12
    • 2014-04-20
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多