2014-05-05 68 views
0

以下簡單代碼讀取CSV文件並返回文件的行數。正如你在輸出中看到的那樣,這個文件有501行。readline()在使用readline()後無法讀取行()

>>> import codecs 
>>> f = codecs.open("tmp.csv", "r", "utf_8") 
>>> print len(f.readlines()) 
501 

但是,如果我使用readlines方法()前插入的ReadLine(),後者沒有在文件的結尾到達。

>>> import codecs 
>>> f = codecs.open("tmp.csv", "r", "utf_8") 
>>> f.readline() 
>>> print len(f.readlines()) 
1 

在我的代碼中是否有任何基本的錯誤?我怎樣才能混合readline()和readlines()? (其實我不需要這兩項功能在我真正的程序混,但我只是好奇...)

您可以在 https://dl.dropboxusercontent.com/u/16653989/tmp/tmp.csv

+0

轉載使用Python 2.7.5(OS X)和Python 2.6.6(科學的Linux 6.4) –

+0

爲什麼你想先閱讀一行然後閱讀所有文件? – Llopis

+1

不需要單獨閱讀第一行,但我只是想知道爲什麼此代碼無法按預期工作。 我的實際代碼中,文件中的第一行是註釋標題,其餘是數據。所以我第一次嘗試做'header = f.readline(); data = f.readlines()' 但是由於這個問題,我做了'lines = f.readlines(); header = lines [0]; data =行[1:]'現在。 –

回答

2

下載文件這事做與codecs模塊。因爲當你做同樣的事情與常規的Python open聲明,它按預期工作:

f = open('tmp.csv') 
f.readline() 
>>> print len(f.readlines()) 
500 
+0

謝謝。是的,常規的「開放」工作正常。 –

+0

@AkiraOkumura,我剛剛讀到你的問題,發現其他人也有這個問題。這是一個編解碼器的錯誤。希望有幫助 – sshashank124

+0

再次感謝你。我會嘗試鏈接Janne告訴我的。 –