J'essaie de créer un script en Python à utiliser au travail pour automatiser certaines de mes tâches. J'ai utilisé le module pyautogui pour simuler les clics de souris et les frappes au clavier, et cela a très bien fonctionné jusqu'à présent!
En ce moment, j'essaie de comprendre comment alimenter automatiquement Python quelques lignes de texte et détecter certains mots-clés. Le texte sera au même endroit chaque fois que j'exécute le script, donc j'ai pensé que je pourrais utiliser pyautogui pour sélectionner le texte que je veux et le copier dans mon presse-papiers. Après cela, j'utiliserais le module win32clipboard pour alimenter le texte en Python.
Python finit par imprimer tout ce qui se trouve dans mon presse-papiers. Qu'est-ce que je fais mal? Existe-t-il un moyen plus simple?
import win32clipboard win32clipboard.OpenClipboard() data = win32clipboard.GetClipboardData() win32clipboard.CloseClipboard() mytext = input(data) keywords = ["m1", "M1", "Melding 1"] if any(keyword in mytext for keyword in keywords): print("test") input('Press ENTER to exit')
3 Réponses :
Vous pouvez remplacer:
for word in mytext.split(' '): for keyword in keywords: if keyword == word: print word
par le plus long et le plus laid (mais fonctionnel!):
if any(keyword in mytext for keyword in keywords): print("test")
"Melding 1" ne correspondrait pas au texte divisé car "Melding 1" dans le texte serait divisé en deux jetons.
Dans votre exemple, il s'agit de "Melding_1", qui ne serait pas divisé par le caractère espace. Si vous recherchez des phrases, vous aurez besoin d'une approche plus impliquée.
C'est pourquoi je dis "Si vos mots clés ne contenaient pas d'espaces ..."
Merci, j'ai mal lu votre message comme l'original. OP devra utiliser regex ou une bibliothèque de recherche. Peut-être que celui-ci pypi.org/project/Whoosh
Votre problème général est que vous n'analysez pas votre texte. Il arrive comme un gros bloc. Vous devez le diviser en une liste de mots afin que chaque mot puisse être évalué.
... wordlist = mytext.split() for trigger in keywords: if any(trigger in s for s in wordlist): print("HIT!") ...
"Melding 1" ne correspondrait pas au texte divisé car "Melding 1" dans le texte serait divisé en deux jetons.
input (data)
affiche data
et attend votre entrée (qui devient plus tard la valeur de mytext
). Supprimez simplement cette ligne. data
est votre texte:
keywords = {"m1", "M1", "Melding_1"} if keywords & set(data.split()): print("test")
Si vos mots clés ne contenaient pas d'espaces , vous pouvez améliorer votre programme pour éviter les correspondances accidentelles de sous-chaînes obtenez de meilleures performances en divisant le texte en jetons et en comparant l'ensemble de jetons à l'ensemble de mots-clés:
if any(keyword in data for keyword in keywords): print(keyword)