dúvida python manipulação de dados

1. dúvida python manipulação de dados

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 20/09/2015 - 18:40h

Boa noite, pessoal.
Sou iniciante em Python e tenho o seguinte objetivo: extrair 5 colunas de um texto de milhares de linhas, pode ser feito o download no link abaixo:

http://www.2shared.com/document/aXIZok-I/catalogo.html

As 5 colunas que pretendo extrair são:
- O primeiro código do lote
- O segundo código do lote
- A descrição do lote
- O peso do lote
- O valor do lote

Por enquanto consegui extrair os códigos dos lotes da seguinte maneira.
Para extrair o primeiro código:
# -*- coding: utf-8 -*-
import os, sys
import re
arquivo=open('catalogo.txt','r')
saida=open('saida.txt','w')
linha=arquivo.readlines();
for j in linha:
if(j.count('.')==1 and j.count('-')==1):
saida.write(j)
entrada.close()
saida.close()


Para extrair o segundo código:
# -*- coding: utf-8 -*-
import os, sys
import re
arquivo=open('catalogo.txt','r')
saida=open('saida.txt','w')
linha=arquivo.readlines();
for j in linha:
if(j.count('.')==2 and j.count('-')==1):
saida.write(j)
entrada.close()
saida.close()


Se puderem me ajudar a extrair as outras 3 informações que faltam seria de grande ajuda.
Obrigado.


  


2. Re: dúvida python manipulação de dados

Fernando
phoemur

(usa Debian)

Enviado em 20/09/2015 - 21:24h

o problema amigo é que nem todos os itens possuem todos os campos, muitos faltam o peso principalmente.

Acredito que o ideal seria dividir em
código1
código2
descrição
preço

ou seja, apenas 4 campos, daí não tem erro, pois o peso ficaria dentro da descrição:


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

pattern1 = re.compile('(\d+\.\d+-\d+.*?R\$ [0-9,.]+)\r\n', re.DOTALL)
pattern2 = re.compile('(\d+\.\d+-\d+)\r\n(\d+\.\d+\.\d+-\d+)\r\n(.*?)(R\$ [0-9,.]+)', re.DOTALL)

with open('catalogo.txt', mode='r') as fd:
for elemento in re.findall(pattern1, fd.read()):
my_search = re.search(pattern2, elemento)
campo1 = my_search.group(1)
campo2 = my_search.group(2)
campo3 = my_search.group(3)
campo4 = my_search.group(4)
print('CÓDIGO1: {}'.format(campo1))
print('CÓDIGO2: {}'.format(campo2))
print('DESCRIÇÃO: {}'.format(campo3))
print('PREÇO DO LOTE: {}'.format(campo4))
print('\n\n')







3. Re: dúvida python manipulação de dados

Carlos Guedes
caduguedess

(usa Outra)

Enviado em 21/09/2015 - 07:12h

phoemur escreveu:

o problema amigo é que nem todos os itens possuem todos os campos, muitos faltam o peso principalmente.

Acredito que o ideal seria dividir em
código1
código2
descrição
preço

ou seja, apenas 4 campos, daí não tem erro, pois o peso ficaria dentro da descrição:


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

pattern1 = re.compile('(\d+\.\d+-\d+.*?R\$ [0-9,.]+)\r\n', re.DOTALL)
pattern2 = re.compile('(\d+\.\d+-\d+)\r\n(\d+\.\d+\.\d+-\d+)\r\n(.*?)(R\$ [0-9,.]+)', re.DOTALL)

with open('catalogo.txt', mode='r') as fd:
for elemento in re.findall(pattern1, fd.read()):
my_search = re.search(pattern2, elemento)
campo1 = my_search.group(1)
campo2 = my_search.group(2)
campo3 = my_search.group(3)
campo4 = my_search.group(4)
print('CÓDIGO1: {}'.format(campo1))
print('CÓDIGO2: {}'.format(campo2))
print('DESCRIÇÃO: {}'.format(campo3))
print('PREÇO DO LOTE: {}'.format(campo4))
print('\n\n')



Tentei usar o código, mas travou porque eram muitas linhas. Aí para testar eu peguei uma fração do texto de 50 linhas mas não aconteceu nada.
Seria possível fazer write em um novo arquivo ao invés de dar print na tela?
Obrigado.











Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts