2014-03-26 32 views
0

我想編寫一個函數來處理從Excel導入的一些數據。數據基本上在Excel列中(交易ID)。爲了方便起見,我想我會使用raw_input複製粘貼Excel中的列,將其存儲並在其上運行該功能。但是,無論我做什麼,我都會遇到錯誤(實際上,我在第一次引入數據時陷入了困境),而且我很確定原因是每個項目都在一個新行中(當我使用Excel的選項將列轉置爲一行,我沒有錯誤)。從Excel複製粘貼列時的錯誤

所以,舉例來說,如果我想嘗試,並設置對象的樣本串的工作,如:

some_string = "014300071432Gre 
014300054037Col 
014300065692ASC" 

(這是格式化從Excel列粘貼當你), 和只需撥打some_string,我會得到:

File "<stdin>", line 1 
    al = "014300071432Gre 
         ^
SyntaxError: EOL while scanning string literal 

我試着用.split()去除換行符,但沒有奏效

我也試過在三重引號中我看到在幾個線程中提出,但這也不起作用。它只是讓我更加困惑,因爲我認爲當你使用三重引號時不需要希望python評估一些東西。

我已經放置了一些Sample Data in a Google doc

真的很感激任何幫助。 謝謝!

回答

0
some_string = '''014300071432Gre 
014300054037Col 
014300065692ASC''' 
+0

這很奇怪,因爲它以前不適合我。你能(1)解釋如何使它與raw_input一起工作嗎? (2)解釋爲什麼它使用三重引號?我認爲他們用於評論文本塊。 謝謝! – Optimesh

+0

三重引號適用於可以包含引號的字符串。你可以用它們「評論」代碼,但它只是一個副作用(你可以使用任何文字作爲Python中的語句,解釋器不會說任何東西)。三引號字符串通常也用作函數的文檔字符串。 – x3al

+0

不知道raw_input有什麼問題:它與引號或其他無關。 – x3al

1

你說的沒錯,在使用raw_input與Excel數據複製列的困難是換行。問題是raw_input具體讀取一行。從official docs

的raw_input([提示])
如果 提示參數存在,它寫到標準的輸出沒有尾隨換行符。然後該函數從輸入中讀取一行,將其轉換爲一個字符串(剝離尾隨的換行符),然後返回該行。

根據定義,換行符標記一行的結尾。所以確實沒有一種簡單的方法將一列Excel數據粘貼到raw_input中。


在大多數情況下,從Python讀取Excel數據的最佳方式是直接讀取Excel文件。最好的包裝是xlrd。假設您的工作簿被命名爲myData.xls和你想讀A2:從第一片A5,你會做這樣

import xlrd 

wb = xlrd.open_workbook('myData.xls') 
ws = wb.sheet_by_index(0) 
result = ws.col_values(0, 1, 5) 

的東西在這一點上,result將單元格的值(A2,A3的4元素的列表,A4和A5)。


如果你確實需要的用戶界面是「複製範圍在Excel單元格中;貼到我的應用程序」,那麼你可能不得不考慮建立具有多行文本輸入框的GUI。在這裏,您有很多選擇,從Python的Tkinter到Python的第三方庫到非Python GUI(只要他們可以讀取輸入並將其傳遞到Python程序)。


編輯:您可以直接讀取剪貼板(所以不要做糊一步的話)。有關更多信息,請參閱thesequestions。從這些問題所採取的最簡單的解決方案依賴於Tkinter的:以上

from Tkinter import Tk 

r = Tk() 
result = r.selection_get(selection='CLIPBOARD') 
r.destroy() 

假設剪貼板已填充。換句話說,流量會像

  1. 你的程序提示用戶在Excel中複製一個選擇
  2. 用戶拷貝一個選擇在Excel
  3. 的用戶響應程序的提示(讓你的程序知道剪貼板就緒)
  4. 你的程序發出上面的代碼到剪貼板中的內容抓取到result
  5. 根據需要你的程序處理result

毫無疑問,有更復雜的方法,但這應該足以讓你走。

+0

也許這可以通過使用剪貼板來實現一些如何?例如some_var = <代碼運行時剪貼板中的內容>? – Optimesh

+1

@Optimesh:好主意。我已經編輯了我的答案,以結合這種方法。 –

+0

謝謝你的幫助:) – Optimesh