Estoy tratando de hacer un script en Python para usar en el trabajo para automatizar algunas de mis tareas. He estado usando el módulo pyautogui para simular clics del mouse y pulsaciones de teclas, ¡y hasta ahora ha funcionado muy bien!

En este momento estoy tratando de descubrir cómo alimentar automáticamente Python unas pocas líneas de texto y detectar algunas palabras clave. El texto estará en el mismo lugar cada vez que ejecute el script, así que pensé que podría usar pyautogui para seleccionar el texto que quiero y copiarlo en mi portapapeles. Después de eso, usaría el módulo win32clipboard para alimentar el texto a Python.

Python termina simplemente imprimiendo lo que esté en mi portapapeles. ¿Qué estoy haciendo mal? hay una manera mas facil?

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')
1
user2820024 10 may. 2019 a las 01:54

3 respuestas

La mejor respuesta

input(data) muestra data y espera su entrada (que luego se convierte en el valor de mytext). Simplemente elimine esa línea. data es tu texto:

if any(keyword in data for keyword in keywords):
     print(keyword)

Si sus palabras clave no tenían espacios , podría mejorar su programa para evitar la coincidencia incidental de subcadenas y obtener un mejor rendimiento dividiendo el texto en tokens y comparando el conjunto de tokens con el conjunto de palabras clave:

keywords = {"m1", "M1", "Melding_1"}
if keywords & set(data.split()):
     print("test")
1
DYZ 10 may. 2019 a las 01:32

Podrías reemplazar:

if any(keyword in mytext for keyword in keywords):
     print("test")

Con la más larga y más fea (¡pero funcional!):

for word in mytext.split(' '):
    for keyword in keywords:
        if keyword == word: print word
1
Abe 9 may. 2019 a las 23:10

Tu problema general es que no estás analizando tu texto. Está llegando como un gran bloque. Debe dividirlo en una lista de palabras para poder evaluar cada palabra.

...
wordlist = mytext.split()

for trigger in keywords:
   if any(trigger in s for s in wordlist):
      print("HIT!")
...
1
EchoCloud 10 may. 2019 a las 00:40