Notre SD Source Code Search Engine (SCSE) peut fournir ce résultat directement. Le SCSE fournit un moyen de rechercher extrêmement rapidement dans de grands ensembles de fichiers en utilisant une partie de la structure du langage pour permettre des requêtes précises et minimiser les faux positifs. Il gère un large éventail de langues, même en même temps, y compris Python. Une interface graphique affiche les résultats de la recherche et une page du texte réel du fichier contenant un hit sélectionné.
Il utilise les informations lexicales des langages source comme base pour les requêtes, composées de divers mots-clés langauge et de jetons de modèle qui correspondent à des éléments langauge de contenu différents. SCSE connaît les types de lexèmes disponibles dans la langue. On peut rechercher un identifiant générique (en utilisant le jeton de requête I) ou un identifiant correspondant à une expression regulatr. Similaire, on peut rechercher une chaîne générique (en utilisant le jeton de requête "S" pour "n'importe quel type de chaîne littérale") ou un type de chaîne spécifique (pour Python incluant "UnicodeStrings", chaînes non-unicode, etc. composent l'ensemble des choses Python comprenant "S").
Ainsi, une recherche:
'for' ... I=ij*
trouve le mot-clé « pour » près (« ... ») un identifiant dont le préfixe est « ij » et vous montre tous les coups. (Des espaces spécifiques de langue, y compris les sauts de ligne et les commentaires sont ignorés
Une recherche triviale:
S
trouve toutes les chaînes littérales Ceci est souvent un ensemble assez grand: -..}
Une recherche
UnicodeStrings
trouve toutes les chaînes littérales qui sont lexicalement définis comme des chaînes Unicode (u "...")
Ce que vous voulez, ce sont toutes les chaînes qui ne sont pas UnicodeStrings. Le SCSE fournit un opérateur de "soustraction" qui soustrait les hits d'un type qui chevauchent les hits d'un autre. Donc, votre question, « ce que les chaînes ne sont pas unicode » est exprimé de façon concise comme:
S-UnicodeStrings
Tous les coups seront affichés les chaînes qui ne sont pas des chaînes unicode, votre question précise.
Le SCSE fournit des fonctions de journalisation afin que vous puissiez enregistrer les appels. Vous pouvez exécuter SCSE à partir d'une ligne de commande, en activant une requête scriptée pour votre réponse. Mettre ceci dans un script de commande fournirait un outil donnant directement votre réponse.
'de __future__ import unicode_literals' –
@Ignacio, Ça promet! Mais cela va-t-il rechigner si le code importe également des modules tiers qui ne le connaissent pas? –
Non, les directives du compilateur via '__future__' n'affectent que le module courant. –