web-dev-qa-db-fra.com

Comment extraire des informations entre deux mots uniques dans un fichier texte important

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.

17
user2760

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 '
>>>
34
RanRag
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 '
11
Misha Akovantsev

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.

7
John Machin

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
2
Aamir Adnan