Экспортировать является двоичный формат файла, используемый кучу правительственных учреждений Соединенных Штатов для публикации наборов данных и NBSP;. Он сделал много смысла, если вы пытаетесь читать файлы данных на вашем мэйнфреймов IBM в 1988 году.
Как я могу использовать это?
Давайте сделаем этот короткий и сладкий:
импорт Экспортировать
с xport.XportReader (xport_file) в качестве читателя:
& NBSP; для строки в читателя:
& NBSP; печать строки
Каждая строка будет ДИКТ с ключом для каждого поля в наборе данных. Значения будут либо юникод строку, поплавок или Int, в зависимости от типа, указанного в файле для этого поля.
Получение Информация о файле
Если у вас есть объект XportReader, есть несколько свойств и методов, которые дадут вам подробную информацию о файле:
- Reader.file: базового объекта файла Python (смотрите следующий раздел).
- Reader.record_start: позиция (в байтах) в файле, где записи начинаются (смотри следующий раздел).
& NBSP; reader.record_length: длина (в байтах) каждой записи (смотрите следующий раздел).
- Reader.record_count (): количество записей в файле. (Внимание: это будет искать до конца файла, чтобы определить длину файла).
- Reader.file_info и reader.member_info: предсказывает, содержащие информацию о том, когда и как набор данных был создан.
- Reader.fields: список полей в наборе данных. Каждое поле является DICT, содержащий следующие ключи, скопированные из спецификации:
& NBSP; структура NameStr {
& NBSP; короткая ntype; / * Переменная типа: 1 = число, 2 = СИМВОЛ * /
& NBSP; короткая nhfun; / * Хэш NNAME (всегда 0) * /
& NBSP; * короткий field_length; / * Длина переменной НАБЛЮДЕНИЯ * /
& NBSP; короткая nvar0; / * * VARNUM /
& NBSP; * Название char8; / * Имя переменной * /
& NBSP; * char40 этикетки; / * ПОЛЕ переменной * /
& NBSP; char8 Nform; / * Имя формате * /
& NBSP; короткая НФЛ; / * Поле Формат длины или 0 * /
& NBSP; * короткие num_decimals; / * ФОРМАТ количество десятичных знаков * /
& NBSP; короткая NFJ; / * 0 = выравнивание по левому краю, 1 = ПРАВО ТОЛЬКО * /
& NBSP; обугливается nfill [2]; / * (Не использовался, для выравнивания и будущее) * /
& NBSP; char8 niform; / * Имя входного формате * /
& NBSP; короткая nifl; / * Информа атрибут длины * /
& NBSP; короткая nifd; / * Информа количество десятичных знаков * /
& NBSP; длинные НКО; / * ПОЛОЖЕНИЕ О СТОИМОСТИ в наблюдательных * /
& NBSP; символ остальные [52]; / * Остальные поля не имеют значения * /
& NBSP;};
& NBSP; Примечание: предметы со звездами были переименованы из коротких имен, приведенных в спецификации. Поскольку это альфа-версия, другие предметы могут быть переименованы в будущем, если кто-то говорит мне, что они.
Произвольный доступ к записям
Если вы хотите получить доступ к определенные записи, вместо перебора, вы можете использовать стандартные функции доступа к файлам языка Python и немного математики.
Получить 1000-запись:
reader.file.seek (reader.record_start + reader.record_length * 1000, 0)
reader.next ()
Получить запись перед самая последняя уши:
reader.file.seek (-reader.record_length * 2, 1)
reader.next ()
Получить последнюю запись:
reader.file.seek (reader.record_start + reader.record_length * (reader.record_count () - 1), 0)
reader.next ()
(В последнем примере, обратите внимание, что мы не можем обратиться с конца файла, потому что может быть обивка байт. Хорошие старые фиксированной ширины бинарные форматы файлов).
Пожалуйста, исправьте / украсть этот код!
Я написал это, потому что это казалось смешным, что не было простой способ, чтобы читать стандартный формат данных в правительство большинства языков программирования. Я, возможно, получил вещи неправильно. Если вы нашли файл, который не декодировать Недвижимости, отправить запрос тянуть. Официальный спецификации здесь. Это удивительно просто для двоичного формата файлов с 80-х годов.
Пожалуйста, не стесняйтесь использовать этот код в качестве базы для написать свою собственную библиотеку для вашего любимого языка программирования. . По данным правительства, должны быть доступными, человек
Требования
- Python
Комментарии не найдены