Extraire à plusieurs reprises une ligne entre deux délimiteurs dans un fichier texte, Python
J'ai un fichier texte dans le format suivant:
DELIMITER1
extract me
extract me
extract me
DELIMITER2
Je voudrais en extraire chaque bloc de extract me
s entre DELIMITER1 et DELIMITER2 dans le .fichier txt
C'est mon actuel, de la non-exécution de code:
import re
def GetTheSentences(file):
fileContents = open(file)
start_rx = re.compile('DELIMITER')
end_rx = re.compile('DELIMITER2')
line_iterator = iter(fileContents)
start = False
for line in line_iterator:
if re.findall(start_rx, line):
start = True
break
while start:
next_line = next(line_iterator)
if re.findall(end_rx, next_line):
break
print next_line
continue
line_iterator.next()
Des idées?
source d'informationauteur Renklauf
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplifier cette à une expression régulière en utilisant
re.S
le DOTALL drapeau.Cela rend également l'utilisation de la non-greedy opérateur
.*?
de sorte que plusieurs non-cumul des blocs de DELIMITER1-DELIMITER2 paires seront tous être trouvés.Cela devrait faire ce que vous voulez:
De votre version précédente, on dirait qu'il est supposé être une fonction d'itérateur. Voulez-vous votre sortie renvoyée à un seul élément à la fois? C'est légèrement différent.
Si les délimiteurs sont à l'intérieur d'une ligne:
Si ils sont sur leur propre ligne:
C'est un bon travail pour les interprétations de la Liste, pas de regex nécessaire. Première liste comp gommages typique
\n
dans la ligne de texte de la liste trouvée lors de l'ouverture d'un fichier txt. Deuxième liste comp utilise justein
opérateur à identifier des schémas de séquence de filtre.