2014-02-11 31 views
1

我在使用csv模塊時遇到問題。使用CSV模塊輸出電子表格中的一些行

這裏是我的代碼

import csv 

out = open('C:\Python27\Work\test.csv') 
data = csv.reader(out) 
data = [row for row in data] 
out.close() 

print data 

我得到的錯誤是這樣的:

Line 3 in module, 
out = open('C:\Python27\Work\test.csv') 
IOError: [Errno 22] invalid mode ('r') or filename: 'C:\\Python27\\work\test.csv' 

我很困惑,因爲在IO錯誤它顯示了兩個反斜線(\),而不是一個,這是很奇怪。

我試着將模式設置爲'r'和'rb',但沒有任何效果。

當我使用不同的csv文件時,一切正常,我得到所需的輸出。

+0

錯誤不是用' csv'模塊。在將文件傳遞到'csv.reader'之前,打開文件時會出現錯誤。關於雙反斜槓,請參見[文檔中的字符串文字](http://docs.python.org/2.0/ref/strings.html)。 –

+1

請參閱此[post](http://stackoverflow.com/questions/15598160/ioerror-errno-22-invalid-mode-r-or-filename-c-python27-test-txt)。似乎是\ t'被解釋爲製表符。 – David

回答

1

問題是,\t被解釋爲製表符。有兩種方法來解決這個問題:

變化:

'C:\Python27\Work\test.csv' 

到原始字符串

r'C:\Python27\Work\test.csv' 

或者逃避反斜槓:

'C:\\Python27\\Work\\test.csv' 
+0

這很好,感謝您的幫助。 –

+0

當然。 Windows路徑往往是有問題的,因爲路徑分隔符恰好是編程中常見的轉義字符。 –

-1

的兩個問題:

  1. 在Windows,你需要花葶反斜線:out = open('C:\\Python27\\Work\\test.csv')
  2. 默認情況下,該文件是隻讀方式打開,當你將列表中data變量,你要分配的列表中csv文件對象。像這樣更改變量名稱:my_data = [row for row in data]
+1

#2不正確。 –

+0

@JoelCornett'data'不是csv.reader的名字?他重複了變量的名稱。 – Trimax

+0

'data = csv.reader(out); data = [row for data in data]'雖然我會優先使用'data = list(csv.reader(out))',但它的工作原理完全正常。' –

相關問題