numpy.loadtxt

numpy.loadtxt(fname, dtype='float', comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes')

Функция loadtxt() создает новый массив из данных в текстовом файле.

Параметры:
fname - файл или строка с именем файла
Файл, файловый объект. Если расширение имени файла - .gz или .bz2, то файл сначала распаковывается. Для Python3.X файловые объекты должны возвращать строки байтов.
dtype - тип данных NumPy (необязательный)
Определяет тип данных выходного массива. По умолчанию float. Если в файле находятся структурированные данные, т.е. структурированный тип данных, то результирующий массив будет одномерным, а каждая строка файла станет его отдельным элементом. В этом случае, необходимо определить структурированный тип данных, количество полей в котором должно соответствовать количеству колонок в текстовом файле.
comments - строка или последовательность строк (необязательный)
Символы или список символов, используемых для указания начала строк-комментариев. Байтовые строки декодируются как Latin-1. По умолчанию используется символ '#'.
delimiter - строка (необязательный)
Строка-разделитель между значениями в текстовом файле. Байтовые строки декодируются как Latin-1. По умолчанию используется пробел.
converters - словарь (необязательный)
Словарь, в качестве ключей которого используются целые числа соответствующие столбцам данных в файле. Значение ключа сопоставляет соответствующий ключу столбец с соответствующей ключу функцией конвертирования. Например converters = {3: lambda x: float(x.lstrip('$') or 0)}.
skiprows - целое число (необязательный)
Указывает количество строк, которые необходимо пропустить. По умолчанию равно 0.
usecols - целое число или кортеж целых чисел (необязательный)
Указывает какие столбцы будут считаны. Первый столбец имеет номер 0. По умолчанию usecols=None что соответствует чтению всех столбцов в файле. Цлое число, например usecols=1 так же как и кортеж с одним значением usecols=(1,) приведет к считыванию единственного из всех столбца в файле, т.е. будет прочитан только второй столбец.
unpack - True или False (необязательный)
Если этот параметр равен True, то все столбцы текстового файла могут быть разделены и распакованы с помощью a, b, c = loadtxt(...). Использование структурированного типа данных приводит к тому, что для каждого отдельного поля будет возвращен отдельный массив. По умолчанию unpack=False
ndmin - целое число (необязательный)
Определяет минимальную размерность возвращаемого массива. По умолчанию ndmin=0 что соответствует сжатию всех осей длинной 1, до одной оси.
Возвращает:
результат - массив NumPy
Массив неициированных (случайных) значений, указанной формы, типа и порядка.
Смотрите так же: fromfile

Замечание

Данная функция предназначена для быстрого чтения данных в простом текстовом формате. Все строки в текстовом файле должны иметь одинаковое количество значений. Функция genfromtxt может обеспечить чтение данных из текстовых файлов с более сложным форматом.



Примеры

Для примера создадим небольшой текстовый файл loadtxt_example.txt из 6 колонок: "Атомный номер", "Обозначение элемента", "Группа", "Период", "Атомная масса", "Радиус атома".

#  Некоторые данные о 15 химических элементах.
#  Сдесь представлены: "Атомный номер", 
#  "Обозначение элемента", "Группа", "Период", 
#  "Атомный масса", "Радиус атома (pm)"


1 H 7 1 1.00797 25
2 He 8 1 4.0026 30
3 Li 1 2 6.939 145
4 Be 2 2 9.0122 105
5 B 3 2 10.811 85
6 C 4 2 12.01115 70
7 N 5 2 14.0067 65
8 O 6 2 - 60
9 F 7 2 18.9984 50
10 Ne 8 2 20.179 40
11 Na 1 3 22.9898 180
12 Mg 2 3 24.305 150
13 Al 3 3 26.9815 125
14 Si 4 3 28.086 110
15 P 5 3 - 100

В данном примере текстовый файл находится в той же директории, в которой происходит выполнение скрипта Python.

>>> import numpy as np
>>> 
>>> fname = 'loadtxt_example.txt'
>>> 
>>> dt_1 = np.dtype([('№','i2'),('symbol','|S2'),('radius','i2'),])
>>> 
>>> a = np.loadtxt(fname, dtype=dt_1, skiprows=6, usecols=(0,1,5))
>>> 
>>> a
array([(1, b'H', 25), (2, b'He', 30), (3, b'Li', 145), (4, b'Be', 105),
       (5, b'B', 85), (6, b'C', 70), (7, b'N', 65), (8, b'O', 60),
       (9, b'F', 50), (10, b'Ne', 40), (11, b'Na', 180), (12, b'Mg', 150),
       (13, b'Al', 125), (14, b'Si', 110), (15, b'P', 100)], 
      dtype=[('№', '<i2'), ('symbol', 'S2'), ('radius', '<i2')])
>>> 
>>> 
>>> 
>>> def parse_mas(s):
        try:
            return float(s)
        except ValueError:
            return np.nan
>>> 
>>> dt_2 = np.dtype([('№','i2'),('symbol','|S2'),('mass','f4'),])
>>> 
>>> b = np.loadtxt(fname, dtype=dt_2, skiprows=6, usecols=(0,1,4), converters={4: parse_mas})
>>> 
>>> b
array([(1, b'H', 1.0079699754714966), (2, b'He', 4.002600193023682),
       (3, b'Li', 6.939000129699707), (4, b'Be', 9.012200355529785),
       (5, b'B', 10.810999870300293), (6, b'C', 12.011150360107422),
       (7, b'N', 14.006699562072754), (8, b'O', nan),
       (9, b'F', 18.99839973449707), (10, b'Ne', 20.179000854492188),
       (11, b'Na', 22.98979949951172), (12, b'Mg', 24.30500030517578),
       (13, b'Al', 26.98150062561035), (14, b'Si', 28.086000442504883),
       (15, b'P', nan)], 
      dtype=[('№', '<i2'), ('symbol', 'S2'), ('mass', '<f4')])
>>> 
>>> 
>>> dt_3 = np.dtype([('symbol','|S2'),('radius','i2'),])
>>> 
>>> a, b = np.loadtxt(fname, dtype=dt_3, skiprows=6, usecols=(1,5), unpack = True)
>>> 
>>> a
array([b'H', b'He', b'Li', b'Be', b'B', b'C', b'N', b'O', b'F', b'Ne',
       b'Na', b'Mg', b'Al', b'Si', b'P'], 
      dtype='|S2')
>>> 
>>> b
array([ 25,  30, 145, 105,  85,  70,  65,  60,  50,  40, 180, 150, 125,
       110, 100], dtype=int16)