coldata - класс для работы данными из текстовых файлов в виде таблицы
Оглавление
- Введение
- Какие файлы можно читать с помощью coldata
- Файлы
- Описание класса coldata
- Примеры чтения текстовых файлов
- Пример записи текстовых файлов
- История версий
- Комментарии
Введение
Довольно часто приходится читать различные массивы данных (числа), которые хранятся в текстовом файле в виде столбцов. Такие файлы еще иногда называют ASCII-data, и многие программы на выходе создают такие файлы, причем у файлов иногда может быть заголовок, а может его и не быть. Для удобного чтения и записи таких файлов я и написал небольшой класс на языке Python.
Какие файлы можно читать с помощью coldata
- Файлы должны представлять собой столбцы чисел (целых или с плавающей точкой).
- Столбцов может быть несколько.
- Столбцы разделяются пробелами или табуляциями. Количество символов-разделителей не важно.
- В начале файла может быть шапка, которую класс coldata игнорирует, если не может преобразовать ее в массив чисел с плавающей точкой.
- При чтении можно пропускать некоторое количество строк в начале файла.
- Разделителем дробной части в числах может быть как точка, так и запятая.
Приведу несколько примеров файлов, которые можно читать с помощью этого класса:
0.0
1.128
2.35
-1.258
-3.33e-1
0.0000 1.2512
-1.1280 5.2687
2.3500 9.1576
-1.2580 -1.2457
-0.3300 95.3654
Sample ASCII data
AValue BValue
-------------------
0.0000 1.2512
-1.1280 5.2687
2.3500 9.1576
-1.2580 -1.3457
-0.3300 95.3654
Sample ASCII data
AValue BValue
-------------------
0,0000 1,2512
-1,1280 5,2687
2,3500 9,1576
-1,2580 -1,3457
-0,3300 95,3654
Файлы
Архив с исходниками и примерами файлов лежит здесь.
Описание класса coldata
Для использования класса coldata его в первую очередь надо импортировать из модуля coldata.py
После этого класс coldata можно использовать в двух режимах:
- Чтение текстовых файлов.
- Запись текстовых файлов
Думаю, что не стоит подробно описывать каждый метод класса, а лучше приведу несколько примеров. Эти примеры прилагаются в архиве с исходником.
Примеры чтения текстовых файлов
from coldata import coldata
columns = coldata ("sample1.txt")
# Для доступа к столбцам используем их индексы
print columns[0]
print columns[1]
В результате чтения файла с содержимым (sample1.txt)
Sample ASCII data
AValue BValue
-------------------
0.0000 1.2512
-1.1280 5.2687
2.3500 9.1576
-1.2580 -1.3457
-0.3300 95.3654
мы получим результат
[0.0, -1.1279999999999999, 2.3500000000000001, -1.258, -0.33000000000000002]
[1.2512000000000001, 5.2686999999999999, 9.1576000000000004, -1.2457, 95.365399999999994]
Второй пример использует for для перебора столбцов. Файл sample2.txt отличается от предыдущего файла только тем, что в качестве разделителя дробной части используется запятая вместо точки.
columns = coldata ("sample2.txt", skiprows=4)
for col in columns:
print col
Обратите внимание, что в этом примере мы использовали еще один необязательный параметр конструктора - skiprows, значение которого обозначает сколько строк надо пропустить при чтении файла. В это количество строк входит и строки, образующие заголовок файла. В этом примере мы пропускаем 4 строки, 3 из которых образуют заголовок:
Sample ASCII data
AValue BValue
-------------------
Четвертая пропущенная строка уже является данными. Поэтому в качестве результата у нас будут столбцы на один элемент короче, чем в предыдущем примере, и в консоли мы увидим следующих результат работы:
[-1.1279999999999999, 2.3500000000000001, -1.258, -0.33000000000000002]
[5.2686999999999999, 9.1576000000000004, -1.3456999999999999, 95.365399999999994]
Пример записи текстовых файлов
from coldata import coldata
columns = coldata ()
columns.addcolumn ([1.123, 5.358, -8.369, 2.0e-1, 15.6987])
columns.addcolumn ([6.3687, -9.3154, -7.1795, 8.2547, 0.2147])
print columns.tostr(format="%.5f", deliver=" ")
columns.save ("out.txt", format="%.5f", deliver=" ")
В этом примере мы сначала создаем класс coldata с помощью конструктора без параметров, а потом добавляем в него два столбца с помощью вызовов метода addcolumn().
С помощью функции tostr() формируем строку, содержащую данные, оформленные в виде столбцов. Функция save() сохраняет ту же самую строку в файл. Обе функции имеют два необязательных параметра:
- format - описывает формат представления каждого числа. По умолчанию используется "%f".
- deliver - разделитель между столбцами в строке. По умолчанию используется символ табуляции "\t".
В результате выполнения этого примера в консоли будет выведено:
1.12300 6.36870
5.35800 -9.31540
-8.36900 -7.17950
0.20000 8.25470
15.69870 0.21470
То же самое будет сохранено в файл out.txt.
В версии 1.6 модуля coldata добавилась функция save(), которая может сохранять массив столбцов в файл, не создавая экземпляр класса coldata в явном виде (внутри функция по-прежнему использует метод save() из coldata).
Определение функции save():
Пример использования:
import coldata
columns = [ [1.123, 5.358, -8.369, 2.0e-1, 15.6987], [6.3687, -9.3154, -7.1795, 8.2547, 0.2147] ]
coldata.save (columns, "out_static.txt", format="%.5f", deliver=" ")
Вот и все, как видите, пользоваться классом coldata очень просто.
И в качестве небольшого оффтопика рекомендую почитать запись под названием Две программы для рисования графиков у меня в блоге, в которой я описывал две программы, которые могут отображать (визуализировать) данные, прочитанные из таких текстовых файлов.
История версий
1.7 (30.06.2009)
- Добавил метод __len__(), чтобы можно было определять количество столбцов с помощью функции len().
- Добавил файл лицензии (основанную на BSD).
1.6
- Появилась функция save() для сохранения массива столбцов в файл, не создавая экземпляр класса coldata в явном виде.
- Рефакторинг и переименование примеров.
1.5
- Первая публичная версия.
Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.