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)