Abrir y leer un archivo con askopenfilename

Tengo el siguiente código donde bash que el usuario abra un archivo de texto y una vez que lo haya seleccionado, me gustaría que el código lo leyera (esto no es un bloque de código completo, solo para mostrar lo que Estoy después).

Sin embargo, estoy teniendo dificultades para usar tkFileDialog.askopenfilename y agregar ‘mode =’ rb ” o usar el código como abajo y usar read donde produce un error.

Alguien sabe cómo puedo hacer esto, ya que no deseo tener que escribir Tkinter.’module ‘para cada elemento, como Menú y Cuadro de lista. Principiante de Tkinter y un poco confundido! ¡Gracias por la ayuda!

import sys from Tkinter import * import tkFileDialog from tkFileDialog import askopenfilename # Open dialog box fen1 = Tk() # Create window fen1.title("Optimisation") # menu1 = Menu(fen1) def open(): filename = askopenfilename(filetypes=[("Text files","*.txt")]) txt = filename.read() print txt filename.close() fen1.mainloop() 

Obviamente el error que estoy recibiendo aquí es:

 AttributeError: 'unicode' object has no attribute 'read' 

No entiendo cómo usar el askopen y también puedo leer el archivo que estoy abriendo.

askopenfilename solo devuelve un nombre de archivo, lo que quería era askopenfile que acepta un parámetro de mode y abre el archivo por usted.

El filename de filename en su código de muestra es solo eso: una cadena que indica el nombre del archivo que desea abrir. Debe pasar eso al método open() para devolver un identificador de archivo para el nombre. A continuación, puede leer desde el identificador de archivo.

Aquí hay algunos códigos rápidos y sucios para ejecutar directamente en el intérprete de Python. (También puede ejecutar esto en un script, pero realmente me gustan las interfaces REPL para probar cosas rápidamente. Puede que también le guste).

 $ python Python 2.7.3 (default, Apr 20 2012, 22:39:59) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import Tkinter >>> from tkFileDialog import askopenfilename >>> root = Tkinter.Tk() ; root.withdraw() '' >>> filename = askopenfilename(parent=root) >>> filename '/tmp/null.c' >>> f=open(filename) >>> f.read() '#include\n\nint main()\n{\n for(;NULL;)\n printf("STACK");\n\n return 0;\n}\n\n' >>> f.close() >>> 

Tenga en cuenta especialmente que no hay nada específico de Tkinter en la lectura del archivo: el cuadro de diálogo solo le proporciona un nombre de archivo.

Tu error es el nombre de tu función. Simplemente cambié def open() para def open1() y funciona.

 def open1(): filename = askopenfilename(parent=fen1) print(filename) f = open(filename) txt = f.read() print txt f.close()