2010-02-22 105 views
2

以下是在windows下用於逐行讀取csv文件的工作。用Python在Linux上高效地讀取csv文件在Python中

f = open(filename, 'r') 

for line in f: 

儘管在將csv文件複製到Linux服務器時,它會失敗。

應該提到的是,性能是一個問題,因爲csv文件很大。因此,我在使用諸如strip之類的東西時擔心字符串複製。

+0

'f = open(filename,'rt')'更好嗎? – 2010-02-22 22:00:09

+0

我很好奇代碼失敗,如果你正在做一個split(),它應該和任一行結尾一樣。我*可以認爲會導致問題的唯一的東西就像是line [: - 1],但是你避免複製字符串,所以不能!除非你已經編譯了沒有通用換行支持的python ... – 2010-02-22 22:11:31

回答

6

Python有適用於Windows,Linux和Mac行結尾內置支持:

f = open(filename, 'rtU') 

for line in f: 
    ... 

如果你真的想不想緩慢的字符串操作,你應該處理他們之前剝去文件。您可以使用dos2unix(可以在Debian軟件包「tofrodos」中找到)或(更容易)使用FTP文本模式,它應該自動執行。

1

dos2unix實用程序將非常有效地執行此操作。如果文件很大,我會將該命令作爲副本的一部分運行。

+0

這是一個很好的提示,儘管它不可​​能作爲複製操作的一部分來完成,我需要它作爲python代碼。 – David 2010-02-22 22:00:41

6

如果性能很重要,爲什麼不使用csv.reader

+0

擊敗我0.001皮秒:-) – 2010-02-22 22:02:42

+0

@John Machin,你在找藉口升級你的電腦嗎? :) – 2010-02-22 22:07:11

4

嗯....你有csv文件,你正在使用Python,爲什麼不使用Python csv模塊讀取文件?

0

實際上,讀取任何文件最有效的方式是在一個大的I/O。有沒有足夠的RAM來做到這一點,但I/O越少越好。