0
votes

Comment lire uniquement les mots entre crochets / parenthèses (dans le fichier .txt) en utilisant python

Je comprends que les lignes de lecture dans les fichiers .txt semblent ressembler à ceci en Python: xxx pré>

Cependant, comment exécuter mon code pour lire les mots dans mes fichiers .txt qui sont à chaque parenthèse équilibrée? p>

Je ne suis pas sûr de savoir comment y aller, disons mes lignes de contenu de fichier .txt tels que ceci: p> xxx pré>

L'idée principale est de lire seulement Ces portions du fichier .txt (c.-à-d. Ceux-celles des parenthèses extérieures et intérieures): P>

 ("xE'", PUT(xx.xxxx.),"'") jdfjhf:jhfjj from xxxx_x_xx_L ;
quit; 

(* 1.xxxxx FROM xxxx_x_Ex_x */ 
proc sql; "TRUuuuth")

(SELECT abc AS abc1, abc_2_ AS efg, abc_fg, fkdkfj_vv, jjsflkl_ff, fjkdsf_jfkj
FROM &xxx..xxx_xxx_xxE
   where (xxx(xx_ix as format 'xxxx-xx') gff &jfjfsj_jfjfj.) and 
  (xxx(xx_ix as format 'xxxx-xx') lec &jgjsd_vnv.)
)


13 commentaires

Que se passe-t-il dans les cas imbriqués? Par exemple dans ("xe '", mettre (xx.xxxx.), "'") Voulez-vous tout lire dans les parenthèses extérieures, ou juste l'intérieur? Les parenthèses peuvent-elles être multi-doublées? Quelques informations supplémentaires sont nécessaires pour vraiment aider ici


Bonjour @tomerikoo, merci de clarifier :) Je veux tout lire de l'extérieur aux parenthèses intérieures. Oui, les parenthèses d'ouverture et de fermeture sont sur différentes lignes du fichier .txt. Par conséquent, je ne suis pas sûr de savoir comment y aller


Peut-être que je n'étais pas clair moi-même dans mon commentaire. Laissez-moi demander à nouveau. Comment vous attendez-vous à votre sortie? Sur l'exemple donné que vous avez donné, fournissez également un exemple sur la façon dont votre sortie ressemblerait. Sera-ce une liste de chaînes? Quelles chaînes contiendras-t-elle? etc. En outre, ce n'est généralement pas un site de service de code, aucun code que vous avez déjà essayé doit également être ici.


@Tomerikoo j'ai mis à jour ma question en conséquence. Je comprends ce que tu veux dire, mais je ne sais pas comment commencer à partir d'autres que le fait que je sais seulement lire des fichiers .Txt ligne par ligne comme indiqué dans ma question ..


Je conseillerais d'aller avec un analyseur approprié et exprimer une grammaire appropriée en l'utilisant .


DP Vous voulez tout lire entre le premier ( et le dernier ) ou entre chaque paire de correspondant ( ( et ) ?


@ 9000 Woah ... Je n'ai jamais vu cela auparavant, Python est vraiment aussi profond .. Merci de partager :) Cela me semble assez complexe pour moi en ce moment.


@tobias_k je veux tout lire de l'extérieur aux parenthèses intérieures


@Psyduck généralement, répétant ce que vous avez dit dans la question de clarifier ce que vous vouliez dire n'est pas très utile. Dans votre exemple, il semble que vous souhaitiez tout du premier ( au dernier ) même si ces parens font pas correspondent, et y compris le texte entre c'est pas dans une paire de (...) . Est-ce exact?


Généralement, les parens dans ce texte semblent ne pas être correctement équilibrés. Où est l'ouverture ( au ) dans la ligne proc sql ligne?


@tobias_k ok je vois ce que tu veux dire maintenant ... Je l'ai édité, c'était une faute de frappe, désolé! Au lieu d'un "/" c'était censé être un "(". La ligne complète est donc (* 1.xxxxx à partir de xxxx_x_ex_x * / proc SQL; "Truuuuth")


@PSYDUCK: Il est souvent plus facile de prendre une solution pour un problème général et de l'appliquer à un problème particulier que de construire une solution spéciale personnalisée à partir de la masse. Ce dernier tend très souvent à devenir plus complexe! Lorsque quelqu'un d'autre a déjà résolu le cas général, il est facile d'utiliser si pour un cas particulier < / a>, vous pouvez littéralement exprimer votre solution dans les conditions de votre problème.


Associé: Expression régulière pour renvoyer le texte entre la parenthèse ... extraire l'occurrence de texte entre parenthèses d'un fichier texte python < / a>


3 Réponses :


0
votes

4 commentaires

Merci Ryan, je vais donner cela un coup de feu quand je reviens sur mon bureau et me mettre à jour ici en conséquence!


Merci Ryan, cela a travaillé de la même manière à la réponse ci-dessus!


NP! Pas tout aussi complet, cependant;)


Oh, notez que le ? est important pour configurer le gourmandise du . * . Sans le ? Le . * sélectionnera simplement tout dans le premier et dernier support du fichier.



0
votes

Je vous suggère de lire le fichier entier, puis de jeter les lignes qui ne contiennent pas ce que vous recherchez.

Votre question est trop non spécifique pour aller dans beaucoup plus de détails ici, malheureusement. P >

Si vous recherchez un motif, par exemple your_line = "texte (texte) Plus de texte" code>, utilisez des expressions régulières, telles que p> xxx pré>

Si vous voulez simplement vérifier si une ligne contient des supports, utilisez P>

if "(" in your_line:
# do something


0 commentaires

0
votes

Pas tout à fait clair ce que vous voulez. Si vous avez besoin du texte entre toutes les paires de em> correspondant aux parenthèses de haut niveau, une expression régulière ne va probablement pas vous amener très loin. Au lieu de cela, vous pouvez faire boucle les caractères, garder une trace de l'ouverture et la fermeture des parens, stocker le texte entre dans un tampon et l'ajouter au résultat lorsque vous revenez au niveau supérieur.

0 (xx.xxxx.)
1 ("xE'", PUT(xx.xxxx.),"'")
2 (* 1.xxxxx FROM xxxx_x_Ex_x */ 
proc sql; "TRUuuuth")
3 (xx_ix as format 'xxxx-xx')
4 (xxx(xx_ix as format 'xxxx-xx') gff &jfjfsj_jfjfj.)
5 (xx_ix as format 'xxxx-xx')
6 (xxx(xx_ix as format 'xxxx-xx') lec &jgjsd_vnv.)
7 (SELECT abc AS abc1, abc_2_ AS efg, abc_fg, fkdkfj_vv, jjsflkl_ff, fjkdsf_jfkj
FROM &xxx..xxx_xxx_xxE
   where (xxx(xx_ix as format 'xxxx-xx') gff &jfjfsj_jfjfj.) and 
  (xxx(xx_ix as format 'xxxx-xx') lec &jgjsd_vnv.)
)


6 commentaires

Merci tobias_k !! Cela a fonctionné, j'ai utilisé votre premier ensemble de codes pour exécuter mon script


Bonjour Tobias_k, désolé de revenir en retard! Disons que mon fichier .txt a une instruction comme celle-ci (Sélectionnez ABC comme ABC1, ABC_2_ comme EFG, ABC_FG, FKDKFJ_VV, JJSFLKL_FF, FJKDSF_JFKJ de & XXX..xxx_xxxx_xxe où (xxx (xx_ix comme format 'xxxx- XX ') GFF & JFJFSJ_JFJFJ.) Et (xxx (xx_ix comme format' xxxx-xx ') lec & jgjsd_vnv.)). Cela signifie que le code de sélection est exécuté sur une ligne séparée et il y a un espacement d'onglet entre le support et sélectionner. Maintenant, le code n'est capable que de capturer (), qui est un espacement uniquement, plutôt que de l'instruction SELECT. Est-ce qu'il y a un moyen de résoudre ceci?


@Psyduck Vous devriez poser cette nouvelle question, peut-être ajouter un lien à cette question à titre de référence.


J'ai effectivement commencé une nouvelle question, mais je ne suis pas beaucoup de succès à ce sujet ... Donc, je suis toujours en train d'essayer à l'aide de regex ou d'édition de votre code mais que cela ne fonctionne pas. Je continue à obtenir "index de liste hors de portée" lorsque j'essaie votre méthode. Je pense que c'est due à une incohérence entre parenthèses sur plusieurs fichiers multiples .txt . Voici le lien vers la question: Stackoverflow. com / questions / 58908686 / ...


@psyduck, je vais y jeter un coup d'œil, mais occupé en ce moment. À première vue, l'index [- 1 ou -2] ne va pas fonctionner, -1 ou -2 est juste -1 .


merci tobias_k .... Yeap ... J'essayais juste parce qu'il n'arrêtait pas de dire l'index de la liste hors de portée.