2017-03-14 6 views
-3

Ich lese eine Python-Datei in einem Python-Programm und ich möchte die Liste aller Bezeichner, Literale, Trennzeichen und Terminator in der Python-Datei gelesen werden. Mit Identifikatoren als Beispiel:Python Identifier Identification

one_var = "something" 
two_var = "something else" 
other_var = "something different" 

die Variablen oben in der Datei Unter der Annahme, gelesen zu werden, sollte das Ergebnis sein:

list_of_identifiers = [one_var, two_var, other_var] 

Das Gleiche gilt für Literale, Terminator und Separatoren. Dank

Ich schrieb bereits Code für alle Operatoren und Schlüsselwörter:

import keyword, operator 
list_of_operators = [] 
list_of_keywords = [] 
more_operators = ['+', '-', '/', '*', '%', '**', '//', '==', '!=', '>', '<', '>=', '<=', '=', '+=', '-=', '*=', '/=', '%=', '**=', '//=', '&', '|', '^', '~', '<<', '>>', 'in', 'not in', 'is', 'is not', 'not', 'or', 'and'] 
with open('file.py') as data_source: 
    for each_line in data_source: 
     new_string = str(each_line).split(' ') 
     for each_word in new_string: 
      if each_word in keyword.kwlist: 
       list_of_keywords.append(each_word) 
      elif each_word in operator.__all__ or each_word in more_operators: 
       list_of_operators.append(each_word) 
    print("Operators found:\n", list_of_operators) 
    print("Keywords found:\n", list_of_keywords) 
+1

Es sieht aus wie Sie uns einige Code für Sie schreiben wollen. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben (einen [mcve] zu bilden), die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die Ausgabe, die Sie tatsächlich erhalten (Ausgabe, Rückverfolgung, etc.). Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [Tour] und [fragen]. – TigerhawkT3

+2

Ich stimme für das Schließen dieser Frage als Off-Topic ab, da SO kein kostenloser Codierungsdienst ist. – TigerhawkT3

+0

Ich bin mir nicht ganz sicher, was Sie hier versuchen, aber das 'Ast'-Modul würde wahrscheinlich helfen - insbesondere [' ast.parse'] (https://docs.python.org/3/library/ ast.html # ast.parse). –

Antwort

1
import ast 

with open('file.py') as data_source: 
    ast_root = ast.parse(data_source.read()) 

identifiers = set() 

for node in ast.walk(ast_root): 
    if isinstance(node, ast.Name): 
     identifiers.add(node.id) 

print(identifiers) 
+0

Danke. Es klappt – Caspian