/ / Яке найкраще рішення для розбору файлів для перетворення файлів? - powerhell, ironpython, etl, fileparsing

Яке найкраще рішення для аналізу файлів для перетворення файлів? - powerhell, ironpython, etl, fileparsing

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

Відповіді:

0 для відповіді № 1

Python чудовий для подібних речей. Саме тому ми і використовуємо. Кожна нова передача клієнтів - це нова пригода, і Python дає нам можливість швидко реагувати.


Редагувати. Усі сценарії python, які читають файли, є "власними аналізаторами файлів". Без фактичного прикладу детально не можна наводити детальний приклад.

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

Це "про все, що існує" у спеціальному файліпарсер ". Якщо ви повторно розбираєте файли .csv або .xml, то в Python є модулі для цього. Якщо ви "розбираєте файли фіксованого формату, ви будете використовувати операції нарізки рядків. Якщо ви "перебираєте інші файли (X12? JSON? YAML?), Вам знадобляться відповідні парсери.

Tab-Delim.

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 )
...

2 для відповіді № 2

Залежно від складності та мінливості вашої роботи, слід розглянути такий інструмент ETL, як SSIS (SQL Server Integration Services).