2017-09-20 2 views
1

ich den folgenden Versuch Code erstellt, um ein Programm zu machen, die eine Excel-Tabelle in einen Datenrahmen geladen werden, und speichern Sie dann den Datenrahmen zu einem anderen Blatt Excel (alle von der Wahl des Benutzers)Begrenzung Python File-Dialog an einen bestimmten Dateityp

import os 
import pandas 
from pandas import ExcelWriter 
import tkinter as tk 
from tkinter import filedialog 

class Load_Save_Program(): 

    def __init__(self,master): 
     self.master = master 

     self.button1=tk.Button(self.master,text="Load",command=self.Load_file) 
     self.button1.grid(row=0,column=0) 

     self.button2=tk.Button(self.master,text="Save",command=self.Save_file) 
     self.button2.grid(row=0,column=1) 

     self.text=tk.Text(master) 
     self.text.grid(row=1,column=0,columnspan=2) 

    def Load_file(self): 
     self.df_import=pandas.read_excel(filedialog.askopenfilename(initialdir = os.getcwd()), 
              filetypes=("excel files","*.xlsx")) 
     self.text.insert(tk.END,self.df_import) 

    def Save_file(self): 
     self.writer = ExcelWriter(filedialog.asksaveasfilename(initialdir = os.getcwd()), 
              filetypes=("Excel files", "*.xlsx")) 
     self.df_import.to_excel(self.writer,'sheet1') 
     self.writer.save() 

root=tk.Tk() 
Load_Save_Program(root) 
root.mainloop() 

Was ich tun möchte, ist dies zu erweitern, so dass, wenn das Programm das Dateiverzeichnis Fenster öffnet, zeigt es nur Dateien, die vom .xlsx Dateityp sind, um einen Fehler von dem Benutzer zu vermeiden öffnen einen inkompatiblen Dateityp. Bis jetzt habe ich noch keine Informationen, die erklären, wie man das richtig einrichtet.

Antwort

0

Es stellt sich heraus, dass die Reihenfolge wichtig ist. Darüber hinaus muss die Antwort den [] um den Dateityp enthalten. Die beiden fraglichen Zeilen müssen

self.df_import=pandas.read_excel(filedialog.askopenfilename(filetypes=[("Excel files","*.xlsx")],initialdir = os.getcwd())) 
self.writer = ExcelWriter(filedialog.asksaveasfilename(filetypes=[("Excel files", "*.xlsx")],initialdir = os.getcwd())) 
+0

Ich bin mir ziemlich sicher, dass die Reihenfolge nicht wichtig ist (ich kann es im Moment nicht testen), aber das Format der Dateitypen ist von entscheidender Bedeutung. Es muss eine Liste von Listen (oder Liste von Tupeln) sein. –

+0

Bitte zögern Sie nicht, dies zu überprüfen. Ich bin nicht sicher, warum es wichtig war, aber ich habe es mehrmals versucht, die Reihenfolge umzustellen, und es funktionierte nur richtig, wenn der Dateiname vorne ist. – jon

1

Die filedalogs haben eine Dateityp-Option, genau das zu tun, was Sie wollen. Die allgemeine Syntax lautet filetypes=[(label1, ext1), (label2, ext2), ...].

In Ihrem Fall, die geben wird:

filedialog.askopenfilename(filetypes=[("Excel files", "*.xlsx")])

+0

Ich habe die Änderungen vorgenommen, die Sie beschrieben (Hinzufügen der []) und das Programm lief genau das gleiche. Es zeigte immer noch Dateien anderer Datentypen. – jon

+0

@jon Sie müssen die 'filetypes =' innerhalb der Klammern von 'askopenfilename' setzen, was in Ihrem Code nicht der Fall ist. –

+0

@jon und das ist genau das, was Sie in Ihrer Antwort getan haben. –

Verwandte Themen