читать файлы ОС в массив numpy в том порядке, в котором они находятся на компьютере - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть папка с несколькими файлами, и я хочу загрузить их в spyder в виде массива numpy. Я могу читать, но порядок неправильный, поэтому я не знаю, каждый ли это файл.

это мой код:

import os
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import pandas as pd
import importlib.util


cur_dir = 'C:/Users/..'
os.chdir(cur_dir)



dpred = []
dobs = []
for file in os.listdir('.'):
    if file.endswith('dpred.npy'):
        dpred.append(np.load(file))
    elif file.endswith('dobs.txt'):
        dobs.append(np.loadtxt(file))

это моя папка: my folder

и вот что я получаю в spyder: numpy ndarray spyder Моя проблема в том, что мои 1dobs, которые были в моей папке, не являются элементом 0 в этом numpy массив, но это номер 6. Итак, не чтение по порядку. Как я могу это исправить? То же самое происходит с моими файлами dpred.npy ...

1 Ответ

1 голос
/ 13 февраля 2020

Вы можете использовать функцию glob:

from glob import glob
files = glob(folder + '*.txt')
files

['10dobs.txt',
 '11dobs.txt',
 '12dobs.txt',
 '13dobs.txt',
 '1dobs.txt',
 '2dobs.txt',
 '3dobs.txt',
 '4dobs.txt',
 '5dobs.txt',
 '6dobs.txt',
 '7dobs.txt',
 '8dobs.txt',
 '9dobs.txt']

Список файлов можно отсортировать в нужном вам порядке. Здесь это порядок символов. Вам нужна цифра c заказ:

import re
import numpy as np

a = np.array([int(re.search('(\d+)dobs.txt', f).group(1)) for f in files])
np_files = np.array(files)

# rearrange the numpy string array using the index of the numerically 
# sorted transformed list
np_files[np.argsort(a)]

array(['1dobs.txt', '2dobs.txt', '3dobs.txt', '4dobs.txt', '5dobs.txt',
       '6dobs.txt', '7dobs.txt', '8dobs.txt', '9dobs.txt', '10dobs.txt',
       '11dobs.txt', '12dobs.txt', '13dobs.txt'], dtype='<U10')
...