Filtro

1. Filtro

Diogo
diogo_flash

(usa Ubuntu)

Enviado em 29/03/2020 - 08:54h

Bom dia!
Estou precisando fazer um filtro para listar os itens. Tenho uma lista chamada numeros.txt que contém os numeros 20, 2001, 189, 2020.

Ao usar o comando:

numero = '\b20\b';
filtro = commands.getoutput('cat numeros.txt | grep ' + numero);


A minha saida fica filtro = ' '. Enquanto deveria obter a saída filtro = 20 somente. Observei que o motivo é porque o '\b' no python entende-se que é '\x08'. Por esse motivo não consego obter o resultado esperado. Alguém saberia como posso resolver?


  


2. Re: Filtro

Matheus
pylm

(usa Gentoo)

Enviado em 29/03/2020 - 13:34h

Coloca um r na frente da string e o interpretador não vai ler os caracteres especiais.


numero = r'\b20\b'


De qualquer modo, não faz sentido isso que você tá fazendo. Primeiro que dá pra chamar o grep sem usar o cat antes e segundo que não tem sentindo fazer um script python e ficar chamando ferramentas do shell.


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

numero = '20'
with open('numeros.txt', 'r') as f:
for line in f:
if line.strip() == numero:
print(line)



3. Re: Filtro

Diogo
diogo_flash

(usa Ubuntu)

Enviado em 29/03/2020 - 14:55h

pylm escreveu:

Coloca um r na frente da string e o interpretador não vai ler os caracteres especiais.


numero = r'\b20\b'


De qualquer modo, não faz sentido isso que você tá fazendo. Primeiro que dá pra chamar o grep sem usar o cat antes e segundo que não tem sentindo fazer um script python e ficar chamando ferramentas do shell.


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

numero = '20'
with open('numeros.txt', 'r') as f:
for line in f:
if line.strip() == numero:
print(line)


pylm escreveu:

Coloca um r na frente da string e o interpretador não vai ler os caracteres especiais.


numero = r'\b20\b'


De qualquer modo, não faz sentido isso que você tá fazendo. Primeiro que dá pra chamar o grep sem usar o cat antes e segundo que não tem sentindo fazer um script python e ficar chamando ferramentas do shell.


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

numero = '20'
with open('numeros.txt', 'r') as f:
for line in f:
if line.strip() == numero:
print(line)


É porque no meu caso, a minha lista contem:


A - 20
B - 190
C - 201
D - 20016


E por ai vai. Usando a forma como você fez, eu não consigo achar valor nenhum, ficando filtro = ' '. Queria fazer um filtro onde informo os números automaticamente e achar se já existe o número 20 na lista. Tipo tem um loop incrementando a contagem dos números. Ai quando está chegando no numero 20, queria que aparecesse somente o valor 'A - 20'.


4. Re: Filtro

Lisandro Guerra
Lisandro

(usa Arch Linux)

Enviado em 29/03/2020 - 21:57h

Em vez de usar \b20\b use \<20\>.
Abraço


5. Re: Filtro

Matheus
pylm

(usa Gentoo)

Enviado em 29/03/2020 - 22:03h


diogo_flash escreveu:

pylm escreveu:

Coloca um r na frente da string e o interpretador não vai ler os caracteres especiais.


numero = r'\b20\b'


De qualquer modo, não faz sentido isso que você tá fazendo. Primeiro que dá pra chamar o grep sem usar o cat antes e segundo que não tem sentindo fazer um script python e ficar chamando ferramentas do shell.


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

numero = '20'
with open('numeros.txt', 'r') as f:
for line in f:
if line.strip() == numero:
print(line)


pylm escreveu:

Coloca um r na frente da string e o interpretador não vai ler os caracteres especiais.


numero = r'\b20\b'


De qualquer modo, não faz sentido isso que você tá fazendo. Primeiro que dá pra chamar o grep sem usar o cat antes e segundo que não tem sentindo fazer um script python e ficar chamando ferramentas do shell.


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

numero = '20'
with open('numeros.txt', 'r') as f:
for line in f:
if line.strip() == numero:
print(line)


É porque no meu caso, a minha lista contem:


A - 20
B - 190
C - 201
D - 20016


E por ai vai. Usando a forma como você fez, eu não consigo achar valor nenhum, ficando filtro = ' '. Queria fazer um filtro onde informo os números automaticamente e achar se já existe o número 20 na lista. Tipo tem um loop incrementando a contagem dos números. Ai quando está chegando no numero 20, queria que aparecesse somente o valor 'A - 20'.


E seguindo teu método com o que falei pra fazer na variavel numero, funciona?


6. Re: Filtro

Diogo
diogo_flash

(usa Ubuntu)

Enviado em 31/03/2020 - 12:38h

pylm escreveu:


diogo_flash escreveu:

pylm escreveu:

Coloca um r na frente da string e o interpretador não vai ler os caracteres especiais.


numero = r'\b20\b'


De qualquer modo, não faz sentido isso que você tá fazendo. Primeiro que dá pra chamar o grep sem usar o cat antes e segundo que não tem sentindo fazer um script python e ficar chamando ferramentas do shell.


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

numero = '20'
with open('numeros.txt', 'r') as f:
for line in f:
if line.strip() == numero:
print(line)


pylm escreveu:

Coloca um r na frente da string e o interpretador não vai ler os caracteres especiais.


numero = r'\b20\b'


De qualquer modo, não faz sentido isso que você tá fazendo. Primeiro que dá pra chamar o grep sem usar o cat antes e segundo que não tem sentindo fazer um script python e ficar chamando ferramentas do shell.


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

numero = '20'
with open('numeros.txt', 'r') as f:
for line in f:
if line.strip() == numero:
print(line)


É porque no meu caso, a minha lista contem:


A - 20
B - 190
C - 201
D - 20016


E por ai vai. Usando a forma como você fez, eu não consigo achar valor nenhum, ficando filtro = ' '. Queria fazer um filtro onde informo os números automaticamente e achar se já existe o número 20 na lista. Tipo tem um loop incrementando a contagem dos números. Ai quando está chegando no numero 20, queria que aparecesse somente o valor 'A - 20'.


E seguindo teu método com o que falei pra fazer na variavel numero, funciona?


Não. Continuei recebendo saida filtro = ' '.



7. Re: Filtro

Diogo
diogo_flash

(usa Ubuntu)

Enviado em 31/03/2020 - 12:45h

Lisandro escreveu:

Em vez de usar \b20\b use \<20\>.
Abraço


Funcionou usando o \<20\>. Porém, agora não estou conseguindo concatenar essa variável que recebe \<20\> (que é obtida por um loop onde vai incrementando os números) no comando.


num = '\<20\>'
a =commands.getoutput('cat /tmp/numeros.txt | grep ' + num);
a = ' '


Se eu colocar manualmente da certo.

a =commands.getoutput("cat /tmp/numeros.txt | grep '\<20\>' ");
a = 'A - 20'




8. Re: Filtro

Diogo
diogo_flash

(usa Ubuntu)

Enviado em 01/04/2020 - 13:28h

Conseguir resolver meu problema. Usei a dica do pylm mas com uma alteração.


with open('numeros.txt', 'r') as f:
for line in f:
if HOST in line:
localizaHostname = True;


Muito obrigado pelas ajudas pessoal.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts