Home > database >  How to use open function with path include space
How to use open function with path include space

Time:01-05

I'M try to make a program that works with drag file into gui and create a hash code for it. But if path of file has space in it, then it goes error. How can i fix this

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\c9947515\AppData\Local\Programs\Python\Python311\Lib\tkinter\__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "C:\Users\c9947515\Desktop\Phyton\pythonProject1\dosya hash.py", line 19, in on_drop
    with open(file_path, "rb") as file:
         ^^^^^^^^^^^^^^^^^^^^^
OSError: [Errno 22] Invalid argument: '{C:/Users/c9947515/Desktop/Wire Text.txt}'
import tkinterdnd2 as tk
import tkinter as tk2
import hashlib

root = tk.Tk()
root.title("File Hash Calculator")
root.geometry("400x150")

root.drop_target_register(tk.DND_FILES)

def on_drop(event):

    file_path = event.data
    # Dosya yolunu oku ve dosya içeriğini oku
    with open(file_path, "rb") as file:
       data = file.read()

    # Dosya içeriğine göre SHA1 değerini hesapla
    sha1_hash = hashlib.sha1(data).hexdigest()
    # SHA1 değerini inputbox'a yazdır
    input_box.insert(0, sha1_hash)

# Dosya sürükleyip bırakıldığında tetiklenecek fonksiyonu ata
root.dnd_bind("<<Drop>>", on_drop)

# Açıklama yazısı oluştur
label = tk2.Label(root, text="Drag and drop a file to calculate its SHA1 hash:")
label.pack()

# Giriş alanı oluştur
input_box = tk2.Entry(root)
input_box.pack()

# Pencerenin çalışmasını sağla
root.mainloop()

CodePudding user response:

It is added by the underlying TCL interpreter when there are spaces in the string. You can remove them using .strip("{}"):

file_path = event.data.strip("{}")

CodePudding user response:

{ and } are being added to your paths if you use file_path = file_path.replace("{", "").replace("}", "") then it will not handle files with { or } in the filename

import tkinterdnd2 as tk
import tkinter as tk2
import hashlib

root = tk.Tk()
root.title("File Hash Calculator")
root.geometry("400x150")

root.drop_target_register(tk.DND_FILES)

def on_drop(event):

    if event.data.startswith('{') and event.data.endswith('}'):
        file_path = event.data.removesuffix('}').removeprefix('{')
    else:
        file_path = event.data    
    # Dosya yolunu oku ve dosya içeriğini oku
    with open(file_path, "rb") as file:
       data = file.read()

    # Dosya içeriğine göre SHA1 değerini hesapla
    sha1_hash = hashlib.sha1(data).hexdigest()
    # SHA1 değerini inputbox'a yazdır
    input_box.insert(0, sha1_hash)

# Dosya sürükleyip bırakıldığında tetiklenecek fonksiyonu ata
root.dnd_bind("<<Drop>>", on_drop)

# Açıklama yazısı oluştur
label = tk2.Label(root, text="Drag and drop a file to calculate its SHA1 hash:")
label.pack()

# Giriş alanı oluştur
input_box = tk2.Entry(root)
input_box.pack()

# Pencerenin çalışmasını sağla
root.mainloop()


  • Related