Python "in" in einer IF-verzweigen funktioniert nicht?
Hallo zusammen,
ich möchte per Tastendruck den Link zu einem Screenshot z.B. https://i.imgur.com/qk5TpU0.png
aus meiner Zwischenablage in ein Google Spreadshead hochladen. Diese sollen natürlich untereinander erscheinen und nicht doppelt. Hier funktioniert aber nicht der "in" Operator.
Bild vom Spreadshead: https://i.imgur.com/gOxxDeN.png
Der Code: "
import keyboard
from tkinter import Tk
import gspread
from oauth2client.service_account import ServiceAccountCredentials
# use creds to create a client to interact with the Google Drive API
scope = ["https://spreadsheets.google.com/feeds", 'https://www.googleapis.com/auth/spreadsheets',
"https://www.googleapis.com/auth/drive.file", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
client = gspread.authorize(creds)
# Find a workbook by name and open the first sheet
# Make sure you use the right name here.
sheet = client.open("test für api").sheet1
def check_value_existence():
row = 2 # Reihe
col = 2 # Spalte
value = sheet.cell(col, row).value
clipboard = Tk().clipboard_get()
if "imgur" in value:
while True:
col = col + 1
value = sheet.cell(col, row).value
if "imgur" in value:
break
print("found", col)
col = col - 1
if value != clipboard:
sheet.update_cell(2, 2, clipboard)
while True:
if keyboard.read_key() == "p":
print("You pressed p")
check_value_existence()
"
1 Antwort
Steht denn in der nebenliegenden Zelle (Spalte 3, Reihe 2) überhaupt ein Wert?
Ich könnte mir nämlich ziemlich gut vorstellen, dass dem nicht so ist und dein Skript stattdessen in eine Endlosschleife hineinläuft. Wenn value daraufhin den Wert None liefert, was laut Dokumentation der Standardwert für leere Zellen wäre, könnte sich ein Laufzeitfehler dazu gesellen, da der in-Operator nicht auf den None-Wert angewandt werden kann.
Ich würde für die Abfragen also eine zusätzliche Prüfung einbauen:
if value not None and "imgur" in value:
und hinterfragen, ob du nicht eher die Variable row inkrementieren wolltest.
Dann wäre es doch m.E. einfacher, es so zu schreiben:
def check_value_existence():
row = 2
column = 2
value = sheet.cell(column, row).value
while value is not None and "imgur" not in value:
column += 1
value = sheet.cell(column, row).value
clipboard = Tk().clipboard_get()
if value != clipboard:
sheet.update_cell(column, row, clipboard)
Die Schleife läuft so lange, bis sie in einer Spalte landet, deren Wert nicht das Wort imgur beinhaltet. In dieser wird gegebenenfalls der Wert aus der Zwischenablage eingefügt.
Andererseits könnte man das noch weiter verkürzen, indem man die Schleife so lange laufen lässt, bis sie in einer Spalte landet, die entweder leer ist oder dem Wert der Zwischenablage entspricht.
# ...
clipboard = Tk().clipboard_get()
while value is not None and value != clipboard:
# ...
sheet.update_cell(column, row, clipboard)
In dem Fall wird diese Zelle einfach überschrieben.
Vielen Dank. Mit dem unteren Zusatz funktioniert es.
Vielen Dank schonmal.
Ja in den Zeilen sind Werte. Ich habe mir die Werte mehrfach ausgeben lassen.
Ich habe "if "imgur" in value:" durch deine Codezeile ersetzt nun geht der Code bei " if value != clipboard:" nicht weiter und es wird die nicht die freie Zeile gefunden.