2014-07-10 113 views
0

對不起,如果主題已經接近,我沒有找到它。 我正在嘗試用Python讀取一些大型csv文件(> 300 MB),這些文件不在本地驅動器中。從Python的非本地磁盤讀取大文件

我不是編程方面的專家,但我知道如果您先將它複製到本地驅動器中,那麼閱讀它時應該花費更少的時間(或者我錯了嗎?)。

事情是,我測試了兩種方法,計算時間是相似的。 我錯過了什麼嗎?有人可以解釋/給我一個很好的方法來儘快閱讀這些文件嗎?

用於複製到我使用本地驅動器:shutil.copy2

文件進行讀取:每一行中MyFile的

非常感謝您的幫助, 克里斯托夫

+2

是什麼讓你覺得複製1st應該比閱讀花費更少的時間。你如何想象複製作品? – luk32

+0

如果您正在閱讀cvs,請查看[CSV](https://docs.python.org/3.3/library/csv.html)模塊。 – Shadow9043

+0

@Barrec從非本地驅動器中讀取和處理不會比從本地驅動器讀取,寫入本地驅動器以及從本地驅動器讀取和處理更快。這顯然是更多的工作。如果它在總運行時間上沒有差異,則意味着處理時間在數據的讀取時間中占主導地位,並且使讀取速度更快並不會產生太大影響。 – BlackJack

回答

0

複製文件順序閱讀並保存在另一個地方。

應用程序的性能可能因數據訪問模式,計算I/O時間,網絡延遲和網絡帶寬而異。

如果您只執行一次腳本並按順序讀取它,則與複製文件相同,除了您對其執行計算而不是保存。即使您處理小塊數據,它也可能會被緩衝。事實上,在單次執行的情況下,如果您複製第一次,則實際上會讀取兩次相同的數據,一次用於複製,一次用於計算複製。

如果您多次執行腳本,則需要檢查數據吞吐量。例如,如果您有千兆以太網,那麼1GBit/s是125MByte/s,如果您處理數據較慢,則不受帶寬的限制。

當您爲小塊數據發送多個請求時,網絡延遲開始起作用。根據讀取請求發送網絡請求並在有限的時間內恢復數據,這就是延遲。如果您要求提供一大塊數據,那麼您只需支付一次延遲限制,如果您要求1000倍大容量的1/1000,則需要「支付」1000倍。但是,這可能是由網絡文件系統從您抽象出來的,並且在連續讀取的情況下它會被緩衝。它會在randon跳過文件並閱讀它的小塊。

您可以通過檢查每秒處理多少字節並將其與硬件限制進行比較來檢查受到限制。如果它接近HDD的速度(在你的情況下,我打賭不是),你受I/O - HDD的約束。如果它更低,接近網絡帶寬,則會受到I/O網絡的限制。如果它更低,則要麼受數據處理速度或I/O網絡延遲的限制。但是,如果你受到I/O的約束,你應該看到兩種方法之間的差異,所以如果你看到相同的結果,它就是計算。

+0

好的,謝謝你的詳細解釋Luk! – Barrec

相關問題