簡體   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