エンタープライズ インポート ルーチンのカスタム ファイル解析に最適なソリューションを探しています。基本的に、1 つのファイル形式を標準のファイル形式に変更し、そのデータをデータベースにインポートするルーチンを 1 つ作成したいと考えています。標準またはテンプレートの形式に顧客を準拠させるのは難しいため、クライアントごとにカスタム スクリプトを作成できる必要があります。これまでのところ、これを行うために PowerShell と Iron Python を見てきましたが、これが私が行きたいルートかどうかはわかりません。また、ドラッグ アンド ドロップ スタイルのツールである Talend などのいくつかのツールも調べましたが、柔軟性に関しては、必要なものが得られる場合とそうでない場合があります。私たちは .NET ショップで、過去にこれを行うためのカスタム コードを作成しましたが、新しいファイル形式を取得するたびにカスタム解析関数をコーディングするよりも迅速に作成できるものが必要です。
2299 次
2 に答える
2
作業の複雑さと変動性に応じて、SSIS(SQL Server Integration Services)などのETLツールを検討する必要があります。
于 2009-12-09T22:15:49.180 に答える
0
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 )
...
于 2009-12-09T22:14:33.287 に答える