Jump to content

Percorrer ficheiro e encontrar palavras


oliveiracarlos

Recommended Posts

Boa tarde,

sou novo em Python e tenho um exercicio para resolver que é o seguinte :

f ) procura [ficheiro] palavra – Este comando deve procurar no ficheiro com o nome indicado, linhas que contenham a palavra indicada, e apresentar essas linhas. No caso de o comando ser chamado sem o argumento ficheiro, deve ser feita a pesquisa em todos os ficheiros da directoria corrente, e apresentados os resultados organizados por ficheiro.

Até ao momento ja escrevi o seguinte código mas sem sucesso, será que me podiam ajudar

"Exercicio 2 - Interpretador de comandos Python"

import fileinput
import sys
import os

debug = True

# f) Função Procura Palava num ficheiro

def procura_palavra(nome_ficheiro):

ficheiro = open(nome_ficheiro, "r")
line_num = 0
palavra = intput("Escolha a palavra a procurar")
for line in ficheiro.readlines():
			line_num += 1
		if line.find(palavra):
			print(ficheiro.line)
ficheiro.close()


if __name__ == '__main__':

nome_ficheiro = ("Trabalho_SO.txt")
Edited by djthyrax
GeSHi
Link to comment
Share on other sites

Creio que tens um erro, dentro do for o print(ficheiro.line) deve ser só print(line)

O programa lê linha a linha, compara com a palavra que queres, se estiver presente, verificas com um if, fazes o print dessa linha.

Para obteres todos os ficheiros da directioria usa o método get.os.pathname ou algo parecido, qualquer pesquisa no google te indica como fazer isso em duas linhas num for.

"for files in os.path.name

print files"

é um exemplo que podes reaproveitar

O nome do ficheiro, verificas se existe o argumento. se nao existir, pegas em todos os ficheiros e adicionas a uma lista, depois é executares a presquisa para cada elemento da lista.

Edited by Dr_Lion
Link to comment
Share on other sites

Parece-me que esse código não deve ser teu, pois é bastante simples perceber o que ele faz (a mais) e o que é preciso alterar.

Para leres um ficheiro linha a linha e mostrá-la basta fazeres algo deste género:

ficheiro = open('ficheiro.txt', 'r')
for linha in ficheiro.readlines():
print(linha)

Com esta pequena dica deves conseguir pôr o programa a fazer o que queres fazer para um ficheiro. Para fazeres a parte da procura pelos ficheiros de uma directoria, investiga o módulo glob. http://docs.python.o...brary/glob.html

Relembro que a delimitação de blocos de código em Python é feita usando whitespace (tabulações e espaços), e a leitura do teclado deve ser feita usando a função input ou a raw_input, sendo preferível a segunda.

Edited by djthyrax

Não peças ajuda por PM! A tua dúvida vai ter menos atenção do que se for postada na secção correcta do fórum!

Link to comment
Share on other sites

Boa tarde a todos,

Julguei já ter o meu problema resolvido mas parece que não.

Tenho estado a trabalha no seguinte código cujo objectivo é percorrer um ficheiro linha a linha e se a linha contiver a palavra pretendida ele imprime a linha mas não esta a funciona, podiam me ajudar?

#!/usr/bin/python2.7  
# coding: utf-8	  
import os
import sys
import pwd
import time
import string
from stat import *


'Exercicio 2 - Interpretador de comandos Python'


# f) Função Procura Palava num ficheiro

def procura_palavra(nome_ficheiro):

ficheiro = open(nome_ficheiro, 'r')
l = len(ficheiro.readlines())
palavra = raw_input('Escolha a palavra a procurar \n')
x = 1
while (x <= l):
	for palavra in ficheiro.readline(x):
		print ficheiro.readline(x)
		x = x+1	
ficheiro.close()


if __name__ == '__main__':

nome_ficheiro = ('Trabalho.txt')
procura_palavra(nome_ficheiro)
Edited by oliveiracarlos
Link to comment
Share on other sites

  • 2 weeks later...

Vê este exemplo:

for line in open("file.txt"):
   if "Python" in line:
    print line

Está a verificar cada linha de um ficheiro. Se encontrar a palavra "Python" no ficheiro faz o print da linha inteira. Agora é possível, aliás provável, que este método seja tudo menos à prova de bala. Por exemplo não sei até que ponto pequenas variações como estar colado a caracteres como pontos ou endlines ou pior pode causar com que ele detecte a palavra. Nunca usei mas acho que o módulo "re" foi feito para este tipo de coisas:

http://docs.python.org/library/re.html

Edited by djthyrax
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.