0

我正在为我们的企业导入例程寻找自定义文件解析的最佳解决方案。我想基本上将一种文件格式更改为标准文件格式,并有一个将数据导入数据库的例程。我需要能够为每个客户创建自定义脚本,因为很难让客户遵守标准或模板格式。到目前为止,我已经查看了 PowerShell 和 Iron Python 来做到这一点,但我不确定这是我想要走的路。我还查看了一些工具,例如 Talend,它是一种拖放式工具,就灵活性而言,它可能会或可能不会给我我想要的东西。我们是一家 .NET 商店,过去已经创建了自定义代码来执行此操作,但我需要更快地创建然后每次获得新文件格式时编写自定义解析函数的代码。

4

2 回答 2

2

根据您工作的复杂性和可变性,您应该考虑使用 ETL 工具,例如 SSIS(SQL Server 集成服务)。

于 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 回答