Quais são boas maneiras de fazer upload de dados em massa .csv em um webapp usando Django / Python?

votos
2

Eu tenho um módulo básico de arquivo CSV de upload trabalhando para fazer upload em massa de dados do meu usuário no meu site. I processar o arquivo CSV no backend com um script Python que roda em crontab e, em seguida, enviar e-mail ao usuário os resultados do upload em massa. Este processo funciona ok operacionalmente, mas o meu problema é com o formato do arquivo CSV.

Existem boas ferramentas ou mesmo regras básicas sobre como aceitar diferentes formatos de arquivo CSV? O usuário pode ter uma ordem diferente de colunas de dados, nomes ligeiramente diferentes para os cabeçalhos de coluna (Eu quero a coluna de e-mail a ser intitulado E-mail, mas pode dizer Email Primário, Endereço de Email), ou faltando dados adicionais colunas. Qualquer bons exemplos de CSV upload de funcionalidade que é muito permissiva e user friendly?

Além disso, como posso dizer ao usuário exportar como dados CSV? Estou importar informações do catálogo de endereços, então esses dados muitas vezes vem de Outlook, Thunderbird, outros pacotes de software que têm livros de endereços. Existem outros formatos de dados populares que eu deveria aceitar?

Publicado 25/02/2009 em 16:39
fonte usuário
Em outras línguas...                            


6 respostas

votos
4

Eu confira módulo csv built-in de Python. Francamente um .replace () em sua primeira linha deve cobrir o seu problema sinonímia e, se você estiver usando csv.DictReader você deve ser capaz de lidar com colunas faltando muito facilmente:

my_dict_reader = csv.DictReader(somecsvfile)
for row in my_dict_reader:
    SomeDBModel.address2=row.get('address2', None)

supondo que você queria para armazenar um valor Nenhum para campos em falta.

Respondeu 25/02/2009 em 16:50
fonte usuário

votos
3

Você deve forçar a primeira linha a ser os cabeçalhos, fazer o usuário igualar-se seus cabeçalhos para seus nomes de campo na próxima página, e lembre-se que o mapeamento para os seus futuros depósitos.

Sempre que eu faço CSV importa os dados realmente veio de uma planilha do Excel. Eu tenho sido capaz de poupar tempo usando pyexcelerator para importar o .xlsdiretamente. Meu .csvou .xlscódigo é um gerador que produz {'field_name':'data', ...}dicionários que podem ser atribuídos para modelar objetos.

Se você está fazendo dados de endereço, você deve aceitar vCard .

Respondeu 25/02/2009 em 16:54
fonte usuário

votos
1

Olhe para csvmódulo de stdlib. Ele contém predefinições para popualr dialetos CSV como um produzido por Excel.

mapeamento de campo suporte de classe leitor e se o arquivo contém cabeçalho da coluna não COES depender de ordem de coluna. Por lógica mais complexa, como olhar-se vários nomes alternativos para um campo, você precisa escrever sua própria implementação.

Respondeu 25/02/2009 em 23:29
fonte usuário

votos
1

Se você copiar a tabela excel na área de transferência e depois colar os resultados em bloco de notas, você vai perceber que ele é guia separada. Eu usei uma vez para fazer a importação em massa da maioria dos editores de mesa por dados copiar-colar do editor em textarea na página html.

Você pode usar um fundo para textarea como uma dica para o número de colunas e colocar seus cabeçalhos no topo sugerindo a ordem para um usuário.

Javascript irá processar dados colados e exibi-los para o usuário imediatamente com simples pré-validação, tornando mais fácil para corrigir um erro e repaste.

Em seguida, o botão de importação é clicado, os dados são validados novamente e resultados de importação são exibidos. Infelizmente, eu nunca ouvi qualquer comentário sobre sempre que isso foi fácil de usar ou não.

De qualquer forma, eu ainda vê-lo como uma opção ao implementar importação em massa.

Respondeu 25/02/2009 em 17:15
fonte usuário

votos
1

Dê uma olhada neste projeto: django-BatchImport

Ele pode ser um exagero para você, mas ele ainda pode lhe dar algumas boas idéias para melhorar o seu próprio código.

Edit: também, ignorar que só está usando xlrd para a importação de Excel. Os conceitos básicos são os mesmos, só que você vai usar o módulo csv em vez de xlrd.

Respondeu 25/02/2009 em 16:59
fonte usuário

votos
1

Eu iria lidar com o mapeamento de cabeçalho de coluna aleatório em seu script uma vez que é carregado. É difícil fazer um "catch all", que iria lidar com o que os usuários podem entrar. Eu teria que evoluir como você ir e lentamente construir uma lista de um-um relacionamento baseado no que seus uploads dos usuários.

Ou!

Verifique os cabeçalhos das colunas e verifique se ele está formatado corretamente e aconselhá-los como corrigi-lo se ele não é.

"Primary Email" não reconhecido, o nosso esquema é "Email", "Endereço", "Telefone", etc.

Você também pode aceitar XML e isso permitiria que você criar o seu próprio esquema que eles teriam que aderir. Confira este tutorial .

Respondeu 25/02/2009 em 16:50
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more