Какое решение для анализа файлов является лучшим для преобразования файлов?

StackOverflow https://stackoverflow.com/questions/1877238

Вопрос

Я ищу лучшее решение для пользовательского анализа файлов для наших корпоративных процедур импорта.Я хочу по сути изменить один формат файла на стандартный формат файла и иметь одну процедуру, которая импортирует эти данные в базу данных.Мне нужно иметь возможность создавать собственные сценарии для каждого клиента, поскольку сложно заставить клиента соблюдать стандартный формат или формат шаблона.До сих пор я рассматривал PowerShell и Iron Python, чтобы сделать это, но не уверен, что это тот путь, по которому я хочу идти.Я также рассмотрел некоторые инструменты, такие как Talend, который представляет собой инструмент стиля перетаскивания, который может дать или не дать мне то, что я хочу, с точки зрения гибкости.Мы являемся магазином .NET и в прошлом создавали собственный код для этого, но мне нужно что-то, что будет быстрее создавать, чем кодировать собственные функции синтаксического анализа каждый раз, когда мы получаем новый формат файла.

Это было полезно?

Решение

Python прекрасно подходит для подобных вещей.Вот почему мы используем.Каждый новый перевод клиента — это новое приключение, и Python дает нам возможность быстро реагировать.


Редактировать.Все скрипты Python, которые читают файлы, являются «пользовательскими анализаторами файлов».Без реального примера приводить подробный пример нецелесообразно.

with open( "some file", "r" ) as source:
    for line in source:
        process( line )

Вот и все, что нужно знать о «пользовательском парсере файлов».Если вы анализируете файлы .csv или .xml, у Python есть для этого модули.Если вы анализируете файлы фиксированного формата, вам следует использовать операции разрезания строк.Если вы анализируете другие файлы (X12?JSON?YAML?) вам понадобятся соответствующие парсеры.

Табуляция-разделитель.

from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    record = RecordLayout( aLine.split('\t') )
    ...

Фиксированный макет.

from collections import namedtuple
RecordLayout = namedtuple('RecordLayout',['field1','field2','field3',...])
def process( aLine ):
    fields = ( aLine[:10], aLine[10:20], aLine[20:30], ... )
    record = RecordLayout( fields )
    ...

Другие советы

В зависимости от сложности и изменчивости вашей работы вам следует рассмотреть возможность использования инструмента ETL, такого как SSIS (службы интеграции SQL Server).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top