Python – die neusten Beiträge

Python nur bestimmte dateien in zip archiv speichern?

Hallo Leute,

es geht um folgendes. Eine Funktion (siehe unten) soll ein Zip Archiv erstellen. Dieses soll alle Dateien aus dem verzeichnis /main/content/data beinhalten. Danach wird das ZIP verschlüsselt. Das Ver-, bzw. entschlüsseln funktioniert wunderbar. Nur finde ich, wenn ich das Zip Archiv dann wieder entschlüssele plötzlich nicht die Dateien aus /main/content/data - sondern ebenfalls die Ordner main, content und data. Also die werden mit in das Archiv gepackt. Das sollen Sie aber nicht. Und ich kann meinen Fehler beim besten Willen nicht finden...

Währe nett, wenn mir mal kurz jemand helfen könnte!

Danke im Voraus!

Hier mein Code:

def createEncryptedZIP(compress = zipfile.ZIP_DEFLATED):
    global zip_path
    global zip_name
    global original_path
    
    folder ='main\\content\\data'
    zip_name = simpledialog.askstring(title="Enter Filename", prompt="Enter file name for the new filecontainer")
    zip_path=os.path.join(os.path.dirname(__file__), 'main\\content\\secdrives\\')+zip_name+".secdrive"
    original_path=zip_path
    with zipfile.ZipFile(zip_path, 'w', compress) as target:
        for (root, dirs, files) in os.walk(folder):
            for file in files:
                add = os.path.join(root, file)
                target.write(add)
    to_encrypt = open(zip_path, "rb").read()
    size = len(to_encrypt)
    key = open(keyfile, "rb").read()
    encrypted = bytes(a ^ b for (a, b) in zip(to_encrypt, key))
    with open(zip_path, "wb") as encrypted_out:
        encrypted_out.write(encrypted)
    filelist = glob.glob(os.path.join('main\content\data', "*"))
    for f in filelist:
        os.remove(f)
    print(showinfo("New filecontainer created successfully", "You created a new filecontainer:\n\n"+zip_path))
    label_local.configure(text="Local File: "+zip_path)

Datei wieder entschlüsseln:

def decrypt_direct():
    file = open(zip_path, "rb").read()
    key = open(keyfile, "rb").read()
    decrypted = bytes(a ^ b for (a, b) in zip(file, key))
    with open(zip_path, "wb") as decrypted_out:
        decrypted_out.write(decrypted)
    os.rename(original_path, original_path+".zip")
    with zipfile.ZipFile(zip_path+".zip",'r') as source:
        source.extractall(decrpytion_path)
    subprocess.call(["subst y: " +'"'+os.path.join(os.path.dirname(__file__), 'main\\content\\data')+'"'], shell=True)
    print(showinfo("Decryption Successfull", "Decryption of \n\n "+zip_path+" \n\nSuccessfull!"))


Ganz am Anfang vom File:

decrpytion_path='main\\content\\data'
Python, Python 3

Python - tkinter text eingabe in variable?

Hallo,

ich habe folgendes programmiert:

import tkinter as tk
import os


root = tk.Tk()
root.geometry("400x240")


def encrypt(filename):
    to_encrypt = open(filename, "rb").read()
    size = len(to_encrypt)
    key = os.urandom(size)
    with open(filename + ".lqk", "wb") as key_out:
        key_out.write(key)
    encrypted = bytes(a ^ b for (a, b) in zip(to_encrypt, key))
    with open(filename, "wb") as encrypted_out:
        encrypted_out.write(encrypted)  
    filename = textExample.get(1.0, tk.END+"-1c")
    encrypt(filename)




def decrypt(filename, key):
    file = open(filename, "rb").read()
    key = open(key, "rb").read()
    decrypted = bytes(a ^ b for (a, b) in zip(file, key))
    with open(filename, "wb") as decrypted_out:
        decrypted_out.write(decrypted)
    fileTest = filename + ".lqk"
    try:
        os.remove(fileTest)
    except OSError as e:
        print(e)
    else:
        print("Datei erfolgreich gelöscht!")
    filename = textExample.get(1.0, tk.END+"-1c")
    decrypt(filename, filename + ".lqk")
    
    


textExample=tk.Text(root, height=10)
textExample.pack()
btnEncrypt=tk.Button(root, height=1, width=10, text="Encrypt", 
                    command=encrypt)
btnDecrypt=tk.Button(root, height=1, width=10, text="Decrypt", 
                    command=decrypt)


btnEncrypt.pack()
btnDecrypt.pack()


root.mainloop()

Nur leider funktioniert dies nicht. In der Debugging Console bekomme ich folgende Fehlermeldung:

Bei der Encrypt Funktion:

PS C:\Users\elias\Desktop\Python>  c:; cd 'c:\Users\elias\Desktop\Python'; & 'C:\Users\elias\AppData\Local\Programs\Python\Python310\python.exe' 'c:\Users\elias\.vscode\extensions\ms-python.python-2021.12.1559732655\pythonFiles\lib\python\debugpy\launcher' '52518' '--' 'c:\Users\elias\Desktop\Python\main.py'
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: encrypt() missing 1 required positional argument: 'filename'


Decrypt Funktion:

Traceback (most recent call last):
  File "C:\Users\elias\AppData\Local\Programs\Python\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: decrypt() missing 2 required positional arguments: 'filename' and 'key'      


Wie kann ich das Problem jetzt lösen?

Danke im Vorraus!

VG!

programmieren, Python, Python 3, Tkinter

Speicherung von Variablen in Python, Expertenfrage?

Eine Frage zu dem Übergeben, bzw. Verknüpfen von Variablen.

Gibt es in Python etwas sowas wie Pointer, die nicht für den Nutzer verfügbar sind sondern nur innertechnisch existieren?

Das Problem: ich habe eine Objekt1 wo eine Position einer von einem anderen Objekt2, aber gleiche Klasse, übergeben wird (nur im __init__) und diese Variable in dem Obejekt1 gespeichert wird. Ich zeichne dann aus den beiden Objekten einen Punkt anhand der gespeicherten Positions-Vektoren. Nun das Problem: wenn ich die Variable des Objekt2 "ändere", "ändert" sich auch der Wert des Objekt1 obwohl ich den übergebenen Positionswert NIE mehr aktualisiert habe, somit überschneiden sich die beiden Punkte...

Nun das kuriose: wenn ich bei der Übergabe der Positionsvariable vom Objekt2 zu Objekt1 bei der SPeicherung nicht self.pos = pos SONDERN self.pos = pos+pygame.math.Vector2(0,0) sage, ändert sich dafür der Positionswert des Objekt1 NICHT MEHR... Genau das will ich ja.

Nun meine Theorie warum das so sein könnte... Wen ich self.pos = pos sage speichere ich die Speicheradresse von der Variable des Objekt2, ich referiere quasi darauf. Immer wenn er die Variable im Objekt1 braucht geht er zur Speicheradresse und zieht die Variable aus dem RAM raus. Wenn ich aber self.pos = pos+pygame.math.Vector2(0,0) sage, erzwinge ich durch +pygame.math.Vector2(0,0), dass er die Variabel speichert und nicht nur die Speicheradresse...

Ist meine Thorie richtig? Wenn ja, gibt es noch andere Wege nicht nur die Speicheradresse sondern den Variablen Wert zu speichern?

Danke an jeden der sich das durchgelesen hat xD

LG

Computer, Technik, programmieren, Informatik, Python, Technologie, Python 3

python sinus cosinus tangens math modul?

Hallo,

from math import sin, cos, tan


print("Winkelfunktionen")

print("          /| ")
print("         /ß| ")
print("        /  | ")
print("       /   | ")
print("      /    | ")
print("c    /     |a ")
print("    /      | ")
print("   /       | ")
print("  /        | ")
print(" /        _| ")
print("/@_______/.| ")
print("     b       ")

print("Um das Dreieck zu berechnen brauchen wir folgende Informationen")
rechtwinklig_abfrage = input("Ist ihr Dreieck rechtwinklig? (erkennbar am Zeichen oder 90°) [j/n] ")
if rechtwinklig_abfrage == "j":
    rechtwinklig = True
else:
    rechtwinklig = False
    print("Winkelfunktionen können in nicht-rechtwinkligen Dreiecken nicht benutzt werden! ")


a_abfrage = input("Ist die Seite a gegeben? [j/n] ")
if a_abfrage == "j":
    a_vorhanden = True
    a = int(input("welche Länge ist für a angegeben?: "))
else:
    a_vorhanden = False

b_abfrage = input("Ist die Seite b gegeben? [j/n] ")
if b_abfrage == "j":
    b_vorhanden = True
    b = int(input("welche Länge ist für b angegeben?: "))
else:
    b_vorhanden = False

c_abfrage = input("Ist die Seite c/Hypotenuse gegeben? [j/n] ")
if c_abfrage == "j":
    c_vorhanden = True
    c = int(input("welche Länge ist für c/Hypotenuse angegeben?: "))
else:
    c_vorhanden = False

alpha_abfrage = input("Ist  alpha gegeben? (@) [j/n] ")
if alpha_abfrage == "j":
    alpha_vorhanden = True
    alpha = int(input("Welche Größe ist für alpha angegeben?"))
else:
    alpha_vorhanden = False

beta_abfrage = input("Ist  beta gegeben? (ß) [j/n] ")
if beta_abfrage == "j":
    beta_vorhanden = True
    beta = int(input("Welche Größe ist für alpha angegeben?"))
else:
    beta_vorhanden = False

art_abfrage = input("was soll berechnet werden? [a/b/c/@/ß] ")
if art_abfrage == "a":
    if alpha_vorhanden and b_vorhanden:
        ergebnis = tan(alpha*b)
        print(ergebnis)

wie verwende ich das math modul richtig?

zb

b 0 3

alpha = 40

eigentlich sollte 2,52 rauskommen, das programm kommt aber auf 0,71

Danke

Computer, Mathematik, programmieren, Informatik, modul, Python, Sinus, Cosinus, Tangens

Wie kann ich meinen Python-Code schneller machen?

Hallo,

ich habe gestern in Python ein paar Funktionen geschrieben, die mir ein interessantes Bild ausrechnen sollen. Ich kriege es jedoch nicht hin, dass das Programm einigermaßen schnell läuft und am Ende muss auch die Auflösung darunter leiden

Wenn da mal jemand drüberschauen könnte, wäre das wirklich hilfreich.

import numpy as np
import matplotlib.pyplot as plt
from math import pi, sqrt, atan

#Punkt definieren
class point:
    def __init__(self,x=0,y=0,z=0):
        self.x = x
        self.y = y

    #Operationen
    def __str__(self):
        return "({0},{1})".format(self.x, self.y)

    def __add__(self, other):
        return point(self.x+other.x,self.y+other.y)

    def __sub__(self, other):
        return point(self.x - other.x, self.y - other.y)

    def __abs__(self):
        return sqrt(self.x**2 + self.y**2)

    def __mul__(self, other):
        if type(other) == point:
            return point(self.x * other.x, self.y * other.y)
        return point(self.x * other, self.y * other)

    def __truediv__(self, other):
        if type(other) == point:
            return point(self.x / other.x, self.y / other.y)
        return point(self.x / other, self.y / other)

    def __neg__(self):
        return point(-self.x,-self.y)

# weitere Funktionen für Punkte
def dis(PointA,PointB):
    return abs(PointB-PointA)

def dir(PointA,PointB):
    return (PointB-PointA)/dis(PointA,PointB)


#Funktion für den Wert
def grav_v(x,y,time=5,frames=60):
    p = point(-1,0)
    sp = point(x+1,y)

    c = point(0,0)
    sc = point(0,0)
    
    #Vielleicht wegen des for-loops so langsam?
    for k in range(frames*time):
        try:
            plus = dir(p,c) * 1/dis(p,c)**2 / frames
            sp += plus
            p += sp/frames
            sc -= plus
            c += sc/frames
        except:
            pass

    return p


#Funktion für das Bild
def grav_c(a=-4, b=4, smoothness=1):
    ROWS = []
    p = 0
    print(0)
    #zwei for-loops...
    for Y in np.linspace(a,b,int(200*smoothness)):
        row = []
        for X in np.linspace(a,b,int(200*smoothness)):
            g = grav_v(X, Y)
            row.append( (abs(atan(g.x)*2/pi), abs(atan(g.y)*2/pi), abs(atan(abs(g))*2/pi)) )
        ROWS.append(row)
        p += 1
        print(p / (200 * smoothness))
    plt.imshow(ROWS, extent=(a, b, a, b))
    plt.show()

grav_c()
Computer, Programm, programmieren, Effizienz, Informatik, Programmiersprache, Python

Wie kann ich in einer While Schleife mit If-Bedingungen einen Namen überprüfen?

Ich muss für die Schule, in der Programmiersprache "Python" ein sogenanntes "Textadventure" schreiben. Dabei soll man am Anfang einen Vornamen eingeben. (mit input)

Der Vorname soll ohne Zahlen, Leerzeichen und Sonderzeichen durch kommen. Sprich nur in Buchstaben. Mit isalpha() kann man das tuen. Der Name soll mindestens 3 Buchstaben groß sein. Dies funktioniert mit len().

Mein Problem ist, das ich nicht weiß, wie ich das umsetzten soll.

CODE:

while True:
    vorname = input("Vorname: ")
    if len(vorname) > 2 and vorname.isalpha():
      break
    elif len(vorname) <= 3:
        print("Bitte einen Namen eingeben, der mindestens 3 Buchstaben enthält!")
        print("")
    else:
      print("Keine Leerzeile, Zahlen, Sonderzeichen! Bitte nur ein Namen eingeben!")
      print("")

OUTPUT:

---------------------
Vorname: A
Bitte einen Namen eingeben, der mindestens 3 Buchstaben enthält!
⠀
Vorname: #
Bitte einen Namen eingeben, der mindestens 3 Buchstaben enthält!
⠀
Vorname: Mia
...
(klappt)

Beim OUTPUT fragte mich das Terminal nach den Vornamen. Wo ich "A" eingegeben habe, kam was ich wollte entsprechend raus.

Und hier ist jetzt mein Problem. Wenn ich Sonderzeichen (in dem Falle eine Rautetaste "#") eingebe, soll mir nicht:

"Bitte einen Namen eingeben, der mindestens 3 Buchstaben enthält!"

angegeben werden, sondern:

"Keine Leerzeile, Zahlen, Sonderzeichen! Bitte nur ein Namen eingeben!".

Ich hoffe, ihr könnt mir dabei helfen!! MfG!

Computer, programmieren, Informatik, Python

Meistgelesene Beiträge zum Thema Python