繁体   English   中英

打开和读取带有askopenfilename的文件

[英]Opening and reading a file with askopenfilename

我有以下代码试图允许用户打开文本文件,一旦用户选择了它,我希望代码读取它(这不是完整的代码块,只是为了显示什么内容)我在追)。

但是,我在使用tkFileDialog.askopenfilename并添加'mode ='rb'或使用下面的代码以及在产生错误的地方使用read时遇到困难。

有谁知道我该怎么做,因为我不想为菜单和列表框等每个项目都键入Tkinter.'module'。 初学者对Tkinter有点困惑! 谢谢您的帮助!

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()

显然我到达这里的错误是:

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

我不知道如何使用askopen,也无法读取我正在打开的文件。

askopenfilename仅返回文件名,您想要的是askopenfile ,它接受mode参数并为您打开文件。

示例代码中的filename就是这样-一个字符串,指示您要打开的文件的名称。 您需要将其传递给open()方法以返回名称的文件句柄。 然后,您可以从文件句柄读取。

这是一些可以直接在Python解释器中运行的快速而肮脏的代码。 (您也可以在脚本中运行它,但是我真的很喜欢REPL接口来快速尝试。您也可能喜欢它。)

$ 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<stdio.h>\n\nint main()\n{\n  for(;NULL;)\n    printf("STACK");\n\n  return 0;\n}\n\n'
>>> f.close()
>>> 

特别要注意的是,在读取文件时没有Tkinter特有的东西-该对话框仅提供文件名。

您的错误是函数的名称。 我只是简单地将def open()更改为def open1()

def open1():

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM