Pergunta

Estou procurando a melhor solução para análise de arquivos personalizados para nossas rotinas de importação corporativa. Quero alterar basicamente um formato de arquivo em um formato de arquivo padrão e ter uma rotina que importa esses dados no banco de dados. Preciso criar scripts personalizados para cada cliente, pois é difícil fazer com que o cliente cumpra um formato padrão ou de modelo. Eu olhei para PowerShell e Iron Python para fazer isso até agora, mas não tenho certeza se esse é o caminho que quero seguir. Também analisei algumas ferramentas, como o Talend, que é uma ferramenta de estilo de arrastar e soltar que pode ou não me dar o que eu quero até a flexibilidade. Somos uma loja .NET e criamos código personalizado para fazer isso no passado, mas preciso de algo mais rápido para criar e codificar funções de análise personalizadas cada vez que obtemos um novo formato de arquivo.

Foi útil?

Solução

Python é maravilhoso para esse tipo de coisa. É por isso que usamos. Cada nova transferência de clientes é uma nova aventura e o Python nos dá a flexibilidade de responder rapidamente.


Editar. Todos os scripts do Python que lêem os arquivos são "analisadores de arquivos personalizados". Sem um exemplo real, não é sensato fornecer um exemplo detalhado.

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

É tudo o que existe para um "analisador de arquivo personalizado". Se você estiver analisando os arquivos .csv ou .xml, o Python possui módulos para isso. Se você estiver analisando arquivos de formato fixo, usaria operações de fatiamento de string. Se você estiver analisando outros arquivos (x12? Json? Yaml?) Você precisará de analisadores apropriados.

Tab-delim.

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

Layout fixo.

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

Outras dicas

Dependendo da complexidade e variabilidade do seu trabalho, considere uma ferramenta ETL como o SSIS (SQL Server Integration Services).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top