2017-03-21 5 views
1

Ich versuche eine Datei zu öffnen, deren Dateiname erstellt wurde, indem ich sie in eine ttk.Entry eintippe, an die eine Tkinter.StringVar angehängt ist.Python2/Windows7: Öffnen eines Dateinamens, der ein deutsches Umlaut enthält

Wenn ich versuche, die Datei wieder open() durch Eingabe des gleichen Dateinamens in eine andere Eintrag schlägt dies fehl, wenn ich deutsche 'Umlaute' verwenden.

Ich bekomme eine utf-8 codierte Zeichenfolge aus der .get() -Methode der StringVar. Wenn ich die Dateien im aktuellen Arbeitsverzeichnis aufliste, sind sie nicht utf-8 codiert. (Ich benutze Windows 7!)

Wie geht man damit um?

+0

Welche Version von Python verwenden Sie? Unicode-Handhabung ist zwischen Python 2 und Python 3 ziemlich unterschiedlich. – Blckknght

+0

Ich benutze Python 2.7. Und am Anfang des Skripts '# - * - coding: utf-8 - * -' deklariert. –

+0

A sidenote re * Wenn ich die Dateien im aktuellen Arbeitsverzeichnis aufliste, sind sie nicht utf-8 kodiert. * -> Beachten Sie, dass die Tatsache, dass Ihr Terminal sie nicht korrekt anzeigt, nicht bedeutet, dass Python sie nicht richtig verarbeitet . Können Sie Ihren eigentlichen Code posten? – patrick

Antwort

1
# -*- coding: utf-8 -*- 

import Tkinter as tk 
import ttk 
import sys 
import os 
from pprint import pprint 
import pickle 


class TestApp(tk.Tk): 

    def __init__(self, *args, **kwargs): 

     tk.Tk.__init__(self, *args, **kwargs) 

     self.varFilename = tk.StringVar() 
     self.etyFilename = ttk.Entry(master=self, textvariable=self.varFilename) 

     self.frmBtn = ttk.Frame(master=self) 
     self.btnSave = ttk.Button(master=self.frmBtn, text='Save', 
            command=self.save) 
     self.btnOpen = ttk.Button(master=self.frmBtn, text='Open', 
            command=self.openFile) 

     self.etyFilename.grid(row=0, column=0, sticky=tk.EW, padx=3, pady=3) 
     self.frmBtn.grid(row=1, column=0, sticky=tk.EW) 
     self.btnSave.grid(row=0, column=0, sticky=tk.SE, padx=3, pady=3) 
     self.btnOpen.grid(row=0, column=1, sticky=tk.SE, padx=3, pady=3) 

     self.mainloop() 

    def save(self, *args): 
     someData = {'foo': 'bar'} 

     filename = self.varFilename.get() 

     try: 
      with open(filename, 'wb') as f: 
       pickle.dump(someData, f) 

     except IOError, e: 
      print e 
      sys.exit(1) 


    def openFile(self, *args): 
     filename = self.varFilename.get() 
     print filename 

     print 'Files in cwd:' 
     pprint(os.listdir(os.getcwd())) 

     try: 
      with open(filename, 'rb') as f: 
       someData = pickle.load(f) 
       print someData 

     except IOError, e: 
      print e 
      sys.exit(1) 


TestApp() 
+0

Das ist ein Beispiel, weil das eigentliche Modul zu groß ist .. Wie ich jetzt sehe funktioniert das auch wenn ich einen Umlaut benutze. Der Fehler muss also woanders sein. Ich muss die Routine durchlaufen, die den Dateinamen erstellt. Vielleicht gibt es eine andere Art von Fehler, über die ich gerade nicht nachdenke. Es tut uns leid. –

Verwandte Themen