J'essaie d'extraire les numéros de ligne de début et de fin de toutes les docstrings dans un module Python. Y a-t-il une manière raisonnable de faire ceci sans regex?Extraire les numéros de ligne de toutes les docstrings?
3
A
Répondre
4
Le meilleur moyen d'y parvenir est le module ast
. En particulier, ast.get_docstring
fait presque ce que vous voulez; elle renvoie le contenu du docstring plutôt que le nœud, mais vous pouvez utiliser le même algorithme pour trouver le noeud docstring et son emplacement:
root = ast.parse('''
def foo():
"""the foo function"""
pass
''')
for node in ast.walk(root):
if isinstance(node, (ast.FunctionDef, ast.ClassDef, ast.Module)):
if (node.body and isinstance(node.body[0], ast.Expr) and
isinstance(node.body[0].value, ast.Str)):
print node.lineno, node.body[0].value.lineno, node.body[0].value.s
Bien que non documentée, la propriété lineno
donne la dernière ligne d'un noeud , donc le lineno
du nœud parent sera la première ligne de la docstring ou la ligne avant elle. Il ne semble pas y avoir un moyen facile de faire la différence entre un docstring commençant sur la même ligne que le mot-clé class
ou def
et sur la ligne suivante, en particulier si vous considérez les caractères de continuation de ligne (\
).
Questions connexes
- 1. Supprimer les numéros de ligne de SyntaxHighlighter
- 2. trouver les numéros de ligne de toutes les occurences d'une chaîne dans un fichier texte
- 3. Extraire toutes les valeurs de JSON imbriqué
- 4. Faire VisualVM afficher les numéros de ligne
- 5. Java Les numéros de ligne Swing
- 6. PHP capturant les numéros de ligne?
- 7. C# Precompile affecte les numéros de ligne?
- 8. Vim copie les numéros de ligne?
- 9. Modifier les numéros de ligne dans Eclipse
- 10. Extraire des numéros de téléphone
- 11. regex extraire les numéros n chiffres de chaîne
- 12. Extraire les numéros de téléphone américains à partir d'une chaîne
- 13. Extraire des numéros de cartes de poker
- 14. Calculer la plage Excel lorsque l'utilisateur sélectionne les numéros de ligne et les numéros de colonne
- 15. Pouvons-nous remplacer toutes les valeurs de la colonne par des numéros de ligne?
- 16. numéros ASCII Normaliser les numéros de chiffres
- 17. Que sont les docstrings appelés en java?
- 18. Supprimer toutes les lignes contenant plus de 2 numéros
- 19. Ajout de numéros toutes les deux semaines en javascript
- 20. Obtenir les numéros de ligne et de les séparer en bash
- 21. comment extraire toutes les données entre
- 22. Extraire toutes les images de PowerPoint à l'aide de COM
- 23. Extraire une liste de toutes les méthodes de JavaDoc
- 24. Extraire toutes les images du fichier pdf
- 25. Extraire toutes les URLs Href php
- 26. Docstrings - une ligne par rapport à une ligne multiple
- 27. R supprime les numéros de ligne sur l'impression de traçage
- 28. Comment puis-je obtenir les numéros de ligne de css?
- 29. PHP: Meilleure méthode pour extraire les numéros d'une chaîne
- 30. Extraire 2 numéros d'une chaîne de caractères?
Merci beaucoup! Cela semble faire ce que je veux. – Hypercube
Savez-vous s'il existe une façon cohérente d'obtenir le numéro de ligne d'un nœud? Fondamentalement, je veux savoir s'il y a quelque chose d'autre sur la même ligne qu'un docstring, parce que cela peut arriver: 'def test(): '' 'Ceci est une docstring' ''; pass' – Hypercube
@Hypercube tous les nœuds ont une propriété 'lineno', donc dans ce cas l'instruction pass aura le même' lineno' que la docstring. – ecatmur