J'ai environ 150 fichiers texte remplis d'informations de caractère. Chaque fichier contient deux mots uniques () alpha et bravo et je souhaite extraire le texte entre ces mots uniques et l'écrire dans un fichier différent.
Manuellement, je peux Ctrl + F pour les deux mots et copier le texte entre, je veux juste savoir comment procéder à cela à l'aide d'un programme (de préférence python) pour de nombreux fichiers.
Vous pouvez utiliser expressions régulières pour cela.
>>> st = "alpha here is my text bravo"
>>> import re
>>> re.findall(r'alpha(.*?)bravo',st)
[' here is my text ']
Mon fichier test.txt
alpha here is my line
yipee
bravo
Maintenant en utilisant Ouvrir pour lire le fichier et appliquer regular expressions
.
>>> f = open('test.txt','r')
>>> data = f.read()
>>> x = re.findall(r'alpha(.*?)bravo',data,re.DOTALL)
>>> x
[' here is my line\nyipee\n']
>>> "".join(x).replace('\n',' ')
' here is my line yipee '
>>>
a = 'alpha'
b = 'bravo'
text = 'from alpha all the way to bravo and beyond.'
text.split(a)[-1].split(b)[0]
# ' all the way to '
str.find
et son frère rfind
ont start
et end
args.
alpha = 'qawsed'
bravo = 'azsxdc'
startpos = text.find(alpha) + len(alpha)
endpos = text.find(bravo, startpos)
do_something_with(text[startpos:endpos]
C'est le moyen le plus rapide si le texte contenu est court et proche du front.
Si le texte contenu est relativement important, utilisez:
startpos = text.find(alpha) + len(alpha)
endpos = text.rfind(bravo)
Si le texte contenu est court et proche de la fin, utilisez:
endpos = text.rfind(bravo)
startpos = text.rfind(alpha, 0, endpos - len(alpha)) + len(alpha)
La première méthode est mieux que la méthode naïve de démarrer la deuxième recherche par rapport au début du texte; Utilisez-le si votre texte contenu n'a pas de motif dominant.
Au lieu d'utiliser une expression régulière, utilisez Python string.find
méthode.
>>>> unique_Word_a = 'alpha'
>>>> unique_Word_b = 'bravo'
>>>> s = 'blah blah alpha i am a good boy bravo blah blah'
>>>> your_string = s[s.find(unique_Word_a)+len(unique_Word_a):s.find(unique_Word_b)].strip()
i am a good boy