Benutzer-Werkzeuge

Webseiten-Werkzeuge



programming:python:start

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
programming:python:start [2021/02/13 17:31] – [regex] frankprogramming:python:start [2023/06/08 17:06] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== Python ======
  
 +Web-Automation mit [[Selenium]]
 +
 +GUI mit [[Tkinter]]
 +
 +http mit [[requests]]
 +===== Kommentare =====
 +<code python>
 +#print("Hello, World!")
 +"""
 +This is a comment
 +written in
 +more than just one line
 +"""
 +</code>
 +
 +===== if / else / ternary =====
 +
 +<code python>
 +if condition_1:
 +    Statement 1
 +    Statement 2
 +elif condition_2:
 +    Statement 3
 +    Statement 4
 +else:
 +    Statement 5
 +    Statement 6
 +</code>
 +
 +https://thispointer.com/python-ifelifelse-statement/
 +
 +  value_1 if condition else value_2
 +
 +https://thispointer.com/python-if-else-in-one-line-a-ternary-operator/
 +
 +Switch/Case:
 +https://entwickler.de/python/tutorial-so-implementiert-man-ein-switch-case-statement-in-python/
 +
 +Multiline if:
 +https://stackoverflow.com/questions/181530/styling-multi-line-conditions-in-if-statements
 +===== Schleifen =====
 +
 +<code python>
 +x = 1
 +# Infinite While Loop
 +while True:
 +    print(x)
 +    # If x is 6, then break the loop
 +    if x == 6:
 +        break
 +    x += 1
 +
 +sample_str = 'Sample Text'
 +# Iterate over all the characters in string
 +for elem in sample_str:
 +    # If char is not lower case then skip printing
 +    if elem.islower() == False:
 +        continue
 +    print(elem)
 +    
 +for i in range(first,last+1):
 +    print(i)
 +</code>
 +
 +https://thispointer.com/python-programming/
 +===== Typumwandlung =====
 +
 +==== integer ====
 +
 +  int(str, base=10)
 +  
 +<code python>
 +value = '234'
 +# Convert string to integer
 +num = int(value)
 +value = '01110011'
 +num = int(value, base=2)
 +value = '0xFF11'
 +# Convert hex string to integer
 +num = int(value, base=16)
 +</code>
 +
 +https://thispointer.com/python-string-to-int/
 +==== float ====
 +
 +<code python>
 +def is_float(value):
 +  try:
 +    float(value)
 +    return True
 +  except:
 +    return False
 +
 +def string_to_number(str):
 +  if("." in str):
 +    try:
 +      res = float(str)
 +    except:
 +      res = str  
 +  elif(str.isdigit()):
 +    res = int(str)
 +  else:
 +    res = str
 +  return(res)
 +
 +a = "545.2222"
 +float(a)
 +545.22220000000004
 +
 +# , in . (mit . als tausendtrenner)
 +# 1) Replace all commas for points:
 +value.replace(",", ".")
 +# 2)Remove all but the last point:
 +value.replace(".", "", value.count(".") -1)
 +</code>
 +
 +https://stackoverflow.com/questions/7106417/convert-decimal-mark
 +
 +==== Formatstrings ====
 +
 +https://realpython.com/python-string-formatting/
 +
 +  f"var: {var}"
 +
 +string-of-char:
 +
 +  "="*20
 +===== Listen =====
 +
 +<code python>
 +# List of string 
 +listOfStrings = ['Hi' , 'hello', 'at', 'this', 'there', 'from']
 +
 +if 'at' in listOfStrings :
 +    print("Yes, 'at' found in List : " , listOfStrings)
 +    
 +if listOfStrings.count('at') > 0 :
 +    print("Yes, 'at' found in List : " , listOfStrings)
 +</code>
 +
 +Quelle: https://thispointer.com/python-how-to-check-if-an-item-exists-in-list-search-by-value-or-condition/
 +
 +==== Liste von Objekten ====
 +<code python>
 +content = []
 +for i in find_all('name'):
 +    info = {
 +        "src":    i.get('src'),
 +        "height": i.get('height'),
 +        "width":  i.get('width'),
 +    }
 +    content.append(info)
 +</code>
 +
 +==== dict ====
 +
 +https://realpython.com/iterate-through-dictionary-python/#iterating-through-items
 +===== ini =====
 +
 +<code python>
 +import configparser
 +
 +config = configparser.ConfigParser()
 +config.read('mysql.conf')
 +print(config['mysql']['host'].strip('\"')) # löscht umfassende "" bei strings
 +</code>
 +
 +===== json =====
 +
 +https://stackabuse.com/reading-and-writing-json-to-a-file-in-python/
 +
 +===== grep =====
 +
 +https://www.kite.com/python/answers/how-to-search-a-file-using-grep-in-python
 +
 +===== exceptions =====
 +
 +<code python>
 +def divide(a,b):
 +    result=None
 +    try:
 +        result=a/b
 +    except ZeroDivisionError as e:
 +        print("do not divide through zero!")
 +    except Exception as e:
 +        print(type(e).__name__,e)
 +    else:
 +        print("success")
 +    finally:
 +        print("always executed (err/non-err)")
 +    return result
 +</code>
 +
 +<code python>
 +try:
 +    ...
 +except Exception as e:
 +   print(f"{type(e).__name__} at line {e.__traceback__.tb_lineno} of {__file__}: {e}")
 +</code>
 +===== MySQL =====
 +<code python>
 +import pymysql
 +import configparser
 +
 +config = configparser.ConfigParser()
 +config.read('mysql.conf')
 +
 +db = pymysql.connect(config['mysql']['host'].strip('\"'),
 +                     config['mysql']['user'].strip('\"'),
 +                     config['mysql']['password'].strip('\"'),
 +                     config['mysql']['database'].strip('\"') )
 +#cursor = db.cursor()
 +cursor = db.cursor(pymysql.cursors.DictCursor)
 +sql = "SELECT * FROM users WHERE Nachname = %(lastname)s"
 +lastname="Wunderlich"
 +try:
 +    # Execute the SQL command
 +    cursor.execute(sql,{"id":1,"lastname":lastname})
 +    print(cursor._last_executed)
 +    # Fetch all the rows in a list of lists or as list of dict (if using the DictCursor).
 +    results = cursor.fetchall()
 +    for row in results:
 +        print(row)
 +except Exception as e:
 +    print("Exception: {}".format(type(e).__name__))
 +    print("Exception message: {}".format(e))
 +
 +db.close()
 +</code>
 +
 +===== vorherige Script Instanz beenden =====
 +
 +<code python>
 +import os
 +import psutil
 +#import time
 +
 +application="python"
 +scriptfile=os.path.basename(__file__)
 +
 +print(f"own pid ({scriptfile}):{os.getpid()}")
 +for p in psutil.process_iter():
 +#    print(p.pid,p.name(),p.cmdline())
 +    if p.name().startswith(application):
 +        print("Python: ",p.pid,p.name(),p.cmdline())
 +        if p.pid == os.getpid():
 +            print("own process")
 +        else:
 +            print("other process...")
 +            if scriptfile in p.cmdline():
 +                print("kill it...")
 +                p.terminate()
 +
 +#while True:
 +#    time.sleep(5)
 +
 +print("exit")
 +</code>
 +
 +===== time =====
 +
 +<code python>
 +import time
 +
 +start = time.time()
 +#do something
 +end = time.time()
 +print(round((end - start) * 1000,2),"ms")
 +</code>
 +
 +===== Datetime =====
 +
 +formatstring parsen (3.6) und zeitzone umrechnen:
 +
 +<code python>
 +from datetime import datetime,timezone
 +
 +def parseisodt(d):
 +    dtfmt='%Y-%m-%dT%H:%M:%S%z'
 +    if ":" == d[-3:-2]:
 +        d = d[:-3]+d[-2:]
 +    dt=datetime.strptime(d,dtfmt)
 +    return dt
 +
 +d=parseisodt('2021-03-12T08:03:00+01:00')
 +d=d.astimezone(tz=timezone.utc)
 +print(d)
 +</code>
 +
 +ab 3.7 gibt es dann [[https://docs.python.org/3/library/datetime.html#datetime.date.fromisoformat|fromisoformat]]
 +===== regex =====
 +
 +https://docs.python.org/3/library/re.html
 +
 +  re.sub()
 +  re.match()
 +
 +  # ersetzen mit backref benötigt r-string (r'')
 +  >>> import re
 +  >>> s="2020-10-11"
 +  >>> re.sub('^(\d+)-(\d+)-(\d+)$',r'\3.\2.\1',s)
 +  '11.10.2020'
 +
 +<code python>
 +REGEXP_TEST = re.compile(r'''
 +(?P<test>[0-9A-Z]{3}) # name=test, 3 chars of [0-9A-Z]
 +''', re.VERBOSE)
 +
 +def test(txt):
 +    match = REGEXP_TEST.search(txt)
 +    if match:
 +        print(match.group("test"))
 +        return match.groupdict()
 +    else:
 +        return false
 +</code>
 +===== externe Anwendung =====
 +
 +<code python>
 +import subprocess
 +subprocess.call(["ls", "-l"])
 +</code>
 +
 +===== OOP =====
 +
 +Beispiel-Klasse Fifo
 +
 +<code python>
 +class Fifo:
 +    def __init__(self,liste=[]):
 +        self.__liste=list(liste)#wichtig, damit leere liste erzeugt wird!!!
 +    
 +    def put_in(self,element):
 +        self.__liste.append(element)
 +
 +    def take_out(self):
 +        if len(self.__liste)>0:
 +            return self.__liste.pop(0)
 +        else:
 +            print("Liste leer!")
 +
 +    def interactive(self):
 +        while True:
 +            s=input("bitte Element eingeben (beenden mit leer, rausnehmen mit ?):")
 +            if s=='':
 +                break
 +            elif s=='?':
 +                print(self.take_out())
 +            else:
 +                self.put_in(s)
 +
 +    def getElements(self):
 +        return self.__liste
 +    def __str__(self): #print(obj)
 +        return f"Ich bin eine {self.__class__.__name__} {self.__liste}"
 +    
 +    def __add__(self,other_fifo):
 +        if isinstance(other_fifo,Fifo):
 +            return Fifo(self.getElements() + other_fifo.getElements())
 +        else:
 +            print(f"Addition abgelehnt, element ist ein {other_fifo.__class__} ")
 +
 +l=Fifo()
 +l.put_in("test1")
 +l.put_in("test2")
 +#print(l)
 +l.take_out()
 +print(l)
 +#l.interactive()
 +
 +l2=Fifo()
 +print("l2,sollte leer sein:",l2)
 +l2.put_in("test3")
 +l2.put_in("test4")
 +</code>
 +
 +===== Modularisierung =====
 +Import: https://www.kite.com/python/answers/how-to-import-a-class-from-another-file-in-python
 +
 +to import a class apibase from file apibase.py
 +
 +  from apibase import apibase
 +
 +to import all from myhelper.py:
 +
 +  from myhelper import *
 +===== dict anzeigen =====
 +<code python>
 +import json
 +def formatdict(d):
 +    #obj=json.loads(json_string)
 +    formatted_str = json.dumps(d, indent=2,default=str)
 +    return formatted_str
 +</code>
 +
 +===== Pfad des Scriptes =====
 +<code python>
 +import os.path
 +p=os.path.dirname(os.path.abspath(__file__))
 +</code>
 +===== nano =====
 +
 +für Tab2Spaces + 4 Zeicheneinrückung verwende ich einen alias (~/.bashrc)
 +
 +  alias pynano="nano -ET4"
 +
 +===== python2 venv =====
 +
 +https://stackoverflow.com/questions/1534210/use-different-python-version-with-virtualenv/11301911#11301911
 +
 +<code>
 +wget https://www.python.org/ftp/python/2.7.18/Python-2.7.18.tgz
 +tar -xzf Python-2.7.18.tgz
 +mkdir ~/.localpython
 +./configure --prefix=$HOME/.localpython
 +make
 +make install
 +cd ~/.localpython
 +bin/python -m ensurepip --upgrade #install 2.7 pip
 +#install python3 virtualenv
 +pip install virtualenv
 +python3 -m virtualenv ~/env27 -p $HOME/.localpython/bin/python2.7
 +source ~/env27/bin/activate
 +python -V
 +</code>