2012-06-18 88 views
0

我無法使用python 2.7.3中的以下代碼打開excel文件來寫入數據。 這段代碼有什麼問題?這個「文件打開」代碼有什麼問題?

def openfile(): 
    import os 
    f=open('ab.xls', 'w') 
    return 

import Tkinter 
from Tkinter import * 
root=Tk() 
root.geometry('100x100+100+100') 

button1=Button(root, text='Open file', command=openfile) 
button1.pack() 

root.mainloop() 

感謝

+0

不返回任何內容的返回語句是多餘的。值得注意的是,您應該嘗試在Python中打開文件時使用 [with'語句](http://preshing.com/20110920/the-python-with-statement-by-example) 。這樣更具可讀性,並且可以消除文件未被關閉的可能性(即使發生異常時也是如此)。這不會解決你的問題,但這是一個好習慣。 –

+6

你可以編輯你的文章,幷包括當你運行這段代碼時究竟發生了什麼,以及你期待它做什麼。 – yasar

+0

試試「wb」吧?我有點懷疑你的問題,但錯誤是什麼? –

回答

2

您似乎對這種情況下的開放手段感到困惑。 open()是一個函數,它返回Python中的文件句柄,以便您可以將數據讀入應用程序。

如果要使用系統上的默認程序打開該文件的文件類型,請查看os.startfile()

+0

非常感謝您解決我的困惑。 – mrn

+0

@mrn當使用新命令時,我建議你看一下Python文檔。它非常清晰,寫得很好,幾乎總是給出例子。值得一看,因爲它讓這類事情變得更加明顯。 –

+0

我已經從中吸取了教訓。將來我會首先檢查文檔。再次感謝。 – mrn

-1

我不能看到這段代碼的任何明顯的致命錯誤。

在這裏出門,特別是如果你在windows上運行這個文件,那麼該文件可能仍然在其他地方打開,比如在excel或通過你自己的代碼?如果文件已經在其他地方寫入,則無法打開文件。

+0

我檢查了我的任務管理器沒有其他excel實例正在運行 – mrn

2
  1. import os內部功能意味着它沒有得到進口,直到你運行函數...可能不是你想要的。

  2. 您打開文件,但永遠不會返回句柄。嘗試用return f替換return

  3. 如果您使用的是import xlwt,那麼您不需要這個;它會照顧寫入文件。見我以前在How to export user inputs (from python) to excel worksheet?

響應編輯:

... 'ab.xls' 被打開了,你返回的句柄,然後做與它無關期望它做什麼,到底是什麼?

嘗試

import Tkinter as tk 

def do_something_with_file(): 
    with open('ab.xls', 'w') as f: 
     print("The file is open") 
     # --> now DO SOMETHING with it <-- 

root = tk.Tk() 
root.geometry('100x100+100+100') 
button1 = tk.Button(root, text='Open file', command=do_something_with_file) 
button1.pack() 
root.mainloop() 
+0

我試過第二個選項,但沒有結果,即ab.xls沒有打開。關於第三,我可以用xlwt打開已經存在的文件嗎?我用xlrd也試過了,但沒有運氣。 – mrn

+0

@mrn我覺得你對開放手段感到困惑。這意味着該文件在Python中有一個句柄,可以讀取數據,而不是打開一個程序來處理文件。如果你想要的話,這是完全不同的。 –

+0

@Lattyware:哦。你是對的。我很困惑。我對此完全陌生。基本上,我是一名數學家。但我正在嘗試構建一個小界面,以便每次我不必制定我的線性編程模型。 – mrn

1

你的「F」變量是一個文件對象,它是一個局部變量(只要「OPENFILE」函數結束破壞)。你可以將f聲明爲全局的,或者讓你的openfile函數返回文件對象。