Inscription / Connexion Nouveau Sujet
Niveau Master
Partager :

Un programme python qui cherche une chaîne dans un fichier

Posté par
ndamagle
01-08-17 à 20:05

Ecrire un programme python qui demande a un utilisateur le chemin d'un fichier au format txt et une chaîne a rechercher. Le programme devra rechercher la chaîne fourni dans le texte puis renvoyer sa position. Renvoyer les différentes positions (s'il y a plusieurs occurrences) de la chaîne serai un plus.

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 01-08-17 à 20:29

BONSOIR

Que proposeriez-vous comme étapes ?

Posté par
ndamagle
re : Un programme python qui cherche une chaîne dans un fichier 01-08-17 à 23:49



#demander à un utilisateur le chemin du fichier  
#le mot à rechercher
#transformer la chaîne de caractère en ligne (ici le fichier)
#rechercher le mot et renvoyer ses positions dans le fichier

    

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 08:24

Bonjour.

Citation :
#demander à un utilisateur le chemin du fichier  
#le mot à rechercher


Auriez-vous une idée de fonction(s) pour :

1 / demander le nom du fichier (chemin absolu)
2 / vérifier l'existence du fichier
3 / demander le texte recherché

Posté par
SkyMtn
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 08:31

Bonjour ! Ce genre de fonction sûrement

https://docs.python.org/2/library/mmap.html
ou open pour des usages basiques.

Posté par
NicoTial
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 09:42

un "input" permet de demander à l'utilisateur de taper quelque chose

Posté par
NicoTial
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 09:43

pour vérifier l'existence du fichier, demande à python de tenter de l'ouvrir mais met le dans un environnement erreur (pour que si l'erreur de ne pas trouver le fichier se déclenche, cela n'arrête pas le code).

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 10:22

Des amateurs de Python ?

Ok pour la fonction native input() (ou input_raw()) qui permet de saisir des données en entrée

Fonction os.path.isfile() pour vérifier l'existence d'un fichier

Laissons ndamagle chercher un peu...

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 10:28

comme contenu de fichier, je propose :

La cigale ayant chanté
Tout l'été,
Se trouva fort dépourvue
Quand la bise fut venue.
Pas un seul petit morceau
De mouche ou de vermisseau.
Elle alla crier famine
Chez la Fourmi sa voisine,
La priant de lui prêter
Quelque grain pour subsister
Jusqu'à la saison nouvelle.
Je vous paierai, lui dit-elle,
Avant l'août, foi d'animal,
Intérêt et principal.
La Fourmi n'est pas prêteuse,
C'est là son moindre défaut.
Que faisiez-vous au temps chaud ?
Dit-elle à cette emprunteuse.
Nuit et jour à tout venant,
Je chantais, ne vous déplaise.
Vous chantiez ? j'en suis fort aise,
Eh bien! dansez maintenant.

Comme chaînes de caractères recherchées : "Fourmi" et "lui dit-elle, Avant l'août"

Posté par
Razes
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 11:43

Bonjour,

Je pense que la première chose à faire, c'est un algorithme qui te permettra de préciser les étapes.  Ceci restera valable quelque soit le langage.

Pour ce qui est de python, tu dois connaitre les fonctions d'accès au fichiers (ouverture, lecture des données, fermeture, ...) mais aussi la manipulation des chaines de caractères.

Si tu aime lire les livres en anglais, il y a un livre très intéressant:
Python Cookbook, publié par Alex Martelli, David Ascher
Tu peux consulter la page 220: 5.13 Finding Subsequences qui utilise l'algorithme Knuth-Morris-Pratt (KMP).

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 16:55

@ndamagle, quel est votre niveau en programmation Python ?

Posté par
ndamagle
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 18:11

chaîne=(input("saisir le chemin du fichier:")
cr=(input("Saisir le nom cherché") #mot chercher
mots=chaine.split(" ")
if cr in mots # on verifit que cr est dans la chaine
p=mots.find(cr)# position
print("cr est à la position:",p)
else:
     print cr, n'est pas dans la chaine
      
j'ai essayé mais toujours ça ne marche pas aidez-moi

Posté par
NicoTial
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 18:15

Tu n'ouvres jamais ton fichier text... De plus, tu utilises deux orthographes différentes pour chaines (chaînes).

Posté par
NicoTial
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 18:19

Et pourquoi faire "mots=chaine.split(" ") "?
De plus, il y a un certains nombre de parenthèses qui manquent... pour utiliser le input, la syntaxe est :
mot=input("Voici ce que vois l'utilisateur")

De plus, il te manque des ":" après le if....
Attention au print : il me semble qui affiche les éléments de droite à gauche dans l'appelle : c'est à dire ici, il affiche p puis "cr..." (attention à confirmer... je mélange peut être avec scilab)
Dans ton dernier print, il y a encore une erreur ...
T'es tu relu ?

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 18:32

@ndamagle, débutant(e) en programmation Python ?

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 18:53

un coup de main pour commencer...


#*******************************************************************************
# IMPORT ***********************************************************************
#*******************************************************************************

# module specifique pour le systeme
import sys

# module pour le système d'exploitation
import os

# module pour les expressions regulieres
import re

#*******************************************************************************
# MAIN *************************************************************************
#*******************************************************************************

# effacement de l'ecran
os.system('cls')
print "\n"

# Entree des donnees -----------------------------------------------------------

# nom du fichier a examiner
#
# remarque : de preference utiliser plutôt le slash (/) que l'antislash (\)
while True :

	# attente
	nom_fichier = input("entrez le nom du fichier (chemin absolu) : ")

	# fichier existant ?
	if os.path.isfile(nom_fichier) is True :

		break

	else :

		print " Erreur : fichier %s introuvable\n" % nom_fichier

# attente du texte a rechercher
texte_cherche = input("entrez le texte a rechercher : ")


Posté par
ndamagle
re : Un programme python qui cherche une chaîne dans un fichier 02-08-17 à 20:48

Je suis débutant en programmation  python

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 03-08-17 à 09:40

@ndamagle, bonjour.

De quel outil vous servez-vous pour tester votre script Python ?

Pouvez-vous (sur PC Windows) :

1 : vérifier que votre éditeur de texte fonctionne en utf-8 ?

2 : générer un fichier, par exemple Lafontaine.txt, dont le contenu sera la fable de la "Cigale et la Fourmi" ? Voir mon message du 02-08-17 à 10 h 28.

3 : générer un fichier, par exemple Lafontaine.py, avec  comme contenu le début du script ci-dessus ? Voir mon message du 02-08-17 à 18 h 53.
Les 2 premières lignes du script doivent être les suivantes :
#! /usr/bin/env python
# -*- coding: utf-8 -*-

4 : ouvrir une fenêtre "Invite de commande" ?

5 : vérifier que la police soit Lucida Console ?

6 : taper la commande chcp et noter le 'code page' ?

7 : si le code page retourné est différent de 1252, entrer la commande chcp 1252 pour basculer en 'West European Latin' ?

8 : lancer le script par la commande python chemin_complet_et_nom_du_script et vérifier son comportement ?

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 04-08-17 à 16:39

Bonjour.

Suite du script pour relance...


# lecture du fichier -----------------------------------------------------------

# ouverture du fichier en mode lecture
fichier_id = open(nom_fichier, "r")

# lecture complete du fichier
l_lignes_texte = fichier_id.readlines()

# fermeture du fichier
fichier_id.close()

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 05-08-17 à 15:07

Bonjour.

Suite du script...


# preparation du texte ---------------------------------------------------------

# passage du texte en encodage utf-8
for i in range(len(l_lignes_texte)) :

   l_lignes_texte[i] = l_lignes_texte[i].decode("utf8")

# remplacement de tous les caracteres "\n" finaux par une espace " "
for i in range(len(l_lignes_texte)) :

   l_lignes_texte[i] = re.sub("\n", " ", l_lignes_texte[i])

# liste des longueurs des lignes du texte vide par defaut
l_longueurs_lignes = []

# mise a jour de la liste des longueurs de lignes
for ligne in l_lignes_texte :

	l_longueurs_lignes.append(len(ligne))

# liste des index des lignes du texte
index = 0

l_index_lignes = [index]

# mise a jour de la liste des index de lignes
for ligne in l_lignes_texte :

	index += len(ligne)

	l_index_lignes.append(index)

for i in range(len(l_lignes_texte)) :

	print " Ligne %2d - index = %4d - long. = %2d - %s" % (i, l_index_lignes[i], l_longueurs_lignes[i],l_lignes_texte[i])

print "\n"

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 07-08-17 à 19:41

Bonjour.

Suite et fin du script...


# recherche des occurences du texte --------------------------------------------

# concatenation du texte
texte = ""

for ligne in l_lignes_texte :

	texte += ligne

print " Chaine recherchee    : %s\n" % texte_cherche

# nombre d'occurences
nb_occurences = texte.count(texte_cherche)

print " Nombre d'occurences  : %d\n" % nb_occurences

if nb_occurences > 0 :

	index = 0

	# liste des index des occurences, vide par defaut
	l_index_occurences = []

	for i in range(nb_occurences) :

		index = texte.find(texte_cherche, index)

		l_index_occurences.append(index)

		index += 1

	chaine_index_occurences = ""

	for index in l_index_occurences :

		chaine_index_occurences += str(index) + ", "

	print " Index des occurences : %s\n" % chaine_index_occurences

	# recherche des numeros de ligne des occurences
	l_numero_ligne_occurence = []

	for index_occurence in l_index_occurences :

		for i in range(len(l_index_lignes)) :

			if index_occurence < l_index_lignes[i] :

				l_numero_ligne_occurence.append(i - 1)

				break

	chaine_lignes_occurences = ""

	for numero_ligne in l_numero_ligne_occurence :

		chaine_lignes_occurences += str(numero_ligne) + ", "

	print " Occurences en lignes : %s\n" % chaine_lignes_occurences

Posté par
bbomaths
re : Un programme python qui cherche une chaîne dans un fichier 08-08-17 à 09:04

Bonjour.

Exemple :


 Entrez le nom du fichier (chemin absolu) : u"C:/.../Ile_maths/Lafontaine.txt"

 Entrez le texte a rechercher (en unicode) : u"."

 Ligne  0 - index =    0 - long. = 23 - La cigale ayant chanté
 Ligne  1 - index =   23 - long. = 12 - Tout l'été,
 Ligne  2 - index =   35 - long. = 25 - Se trouva fort dépourvue
 Ligne  3 - index =   60 - long. = 25 - Quand la bise fut venue.
 Ligne  4 - index =   85 - long. = 26 - Pas un seul petit morceau
 Ligne  5 - index =  111 - long. = 28 - De mouche ou de vermisseau.
 Ligne  6 - index =  139 - long. = 23 - Elle alla crier famine
 Ligne  7 - index =  162 - long. = 27 - Chez la Fourmi sa voisine,
 Ligne  8 - index =  189 - long. = 24 - La priant de lui prêter
 Ligne  9 - index =  213 - long. = 29 - Quelque grain pour subsister
 Ligne 10 - index =  242 - long. = 28 - Jusqu'à la saison nouvelle.
 Ligne 11 - index =  270 - long. = 31 - Je vous paierai, lui dit-elle,
 Ligne 12 - index =  301 - long. = 28 - Avant l'août, foi d'animal,
 Ligne 13 - index =  329 - long. = 22 - Intérêt et principal.
 Ligne 14 - index =  351 - long. = 30 - La Fourmi n'est pas prêteuse,
 Ligne 15 - index =  381 - long. = 29 - C'est là son moindre défaut.
 Ligne 16 - index =  410 - long. = 34 - Que faisiez-vous au temps chaud ?
 Ligne 17 - index =  444 - long. = 30 - Dit-elle à cette emprunteuse.
 Ligne 18 - index =  474 - long. = 28 - Nuit et jour à tout venant,
 Ligne 19 - index =  502 - long. = 31 - Je chantais, ne vous déplaise.
 Ligne 20 - index =  533 - long. = 37 - Vous chantiez ? j'en suis fort aise,
 Ligne 21 - index =  570 - long. = 28 - Eh bien! dansez maintenant.

 Chaine recherchee     : .

 Nombre d'occurrences  : 8

 Index des occurrences : 83, 137, 268, 349, 408, 472, 531, 596,

 Occurrences en lignes : 3, 5, 10, 13, 15, 17, 19, 21,



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Inscription gratuite

Fiches en rapport

parmi 1675 fiches de maths

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !