{eval=Array;=+count(Array);}

国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

問答專欄Q & A COLUMN

如何使用Python讀取大文件?

TangpjTangpj 回答0 收藏2
收藏問題

3條回答

funnyZhang

funnyZhang

回答于2022-06-28 15:56

我先假設題主問的大文件在1G~20G左右,這應該算常規的大文件。平常我在做機器學習模型時候我喜歡先在本機上做玩具模型,里面有個步驟就是經常要讀取文件數據,也差不多這么一個數據量。

一般來說,Python讀取大文件的方式可以使用原生的open函數或者pandas的read_csv函數都可以達到目的。

open函數

Python讀取文件一般是用open函數讀取,例如f=open(xx,"r")后f.read()就可以輕松讀取到文本內容。

如果像數據比較大的情況下,可以用read(參數)或者readline()的方式進行迭代讀取,具體代碼如下:

read_csv()

read_csv是Python中一個很有名的數據分析工具包pandas里面的函數,它既可以讀取txt也可以讀取csv格式文件。read_csv中有個參數是chunksize,通過指定一個chunksize分塊大小來讀取文件。具體代碼如下:

還有一個參數是iterator,可以把文件對象變為可迭代對象,只要iterator=True即可,具體代碼如下:

當然我內存只有8G所以讀取會比較慢,所以花了點時間研究了一下后有了上面這些奇淫技巧讀取速度后確實快了不少。當然如果大家有更好的方法或建議歡迎在評論區探討交流,互相學習學習。


如果你對學習人工智能和科技新聞感興趣,歡迎訂閱我的頭條號。我會在這里發布所有與科技、科學以及機器學習有關的有趣文章。偶爾也回答有趣的問題,有問題可隨時在評論區回復和討論,看到即回。

(碼字不易,若文章對你幫助可點贊支持~)

評論0 贊同0
  •  加載中...
zzbo

zzbo

回答于2022-06-28 15:56

這里以讀取txt大文件為例,簡單介紹一下Python是如何讀取大文件的,系統內存在8G左右,txt文件的大小為5G,實驗環境win10+python3.6+pycharm2018,主要內容如下:

1.首先,按照最原始的方法讀取txt文件,即用open函數直接打開txt文件,一次將所有數據讀入到內存中,這里如果文件大于系統運行內存,會直接報Memery Error錯誤,測試代碼如下,非常簡單:

運行這個程序,讀取花費時間大概在41s左右,如下:

2.最基本的方法,為了提高讀取速度,以二進制方式打開文件,測試代碼如下,對上面的代碼只需要稍微修改一下就行,open打開時,設置方式為rb:

運行這個程序,截圖如下,讀取時間大概在7s左右,明顯比直接讀取快6倍左右:

3.為了更快的提高讀取速度,這里我們在read讀取文件的時候,可以按塊大小讀取,每次讀取一定大小的塊,依次循環,直到整個文件讀完,測試代碼如下,也非常簡單:

運行這個程序,截圖如下,讀取時間大概在3.5s左右,比上面直接讀取快2倍左右:

4.這里還有一種提高讀取的方法就是使用with open打開文件,把文件對象視為一個迭代器,系統會自動使用緩沖IO和內存管理,所以讀取速度也會有一定提升,測試代碼如下:

運行程序,讀取時間大概在26s左右,比直接讀取快1倍左右,如下:

5.當然,對于其他類型的大文件,像CSV,Excel等,讀取時也可以按塊讀取,速度也會有明顯的提升,基本代碼如下,每次讀取一定塊大小的文件,直到整個文件讀完:

至此,我們就完成了使用Python讀取大文件。總的來說,基本思想就是按塊讀取,每次只讀取一定塊大小的數據,這樣讀取速度會有明顯提升,網上也有相關教程和資料,介紹的非常詳細,感興趣的話,可以搜一下,希望以上分享的內容能對你有所幫助吧,也歡迎大家評論、留言進行補充。

評論0 贊同0
  •  加載中...
Tangpj

Tangpj

回答于2022-06-28 15:56

之前使用Python讀取超大CSV文件時,出現MemoryError錯誤,甚至死機。。。嘔心瀝血潛心研究后,發現使用pandas的read_csv模塊通過分塊讀取,可以完美解決針對超大CSV文件進行數據分析處理時的內存不足問題,分享一下。

pandas 安裝

Anaconda是一個開源的Python發行版本,其包含了conda、Python、numpy、pandas等180多個科學包及其依賴項。建議直接安裝Anaconda2 或 Anaconda3 ,最好裝64位。

下載地址如下:

https://www.anaconda.com/

read_csv官方文檔鏈接:

http://pandas.pydata.org/pandas-docs/stable/io.html#io-read-csv-table

從官方文檔中我們注意到chunksize 、iterator兩個參數,下面我們就這兩個參數做詳細介紹 。

Iteration

iterator : boolean, default False

Return TextFileReader object for iteration or getting chunks with get_chunk().

chunksize : int, default None

Return TextFileReader object for iteration. See iterating and chunking below.

read_csv——chunksize參數介紹

read_csv中有個參數chunksize,通過指定一個chunksize分塊大小來讀取文件,返回的是一個可迭代的對象TextFileReader,分塊處理可以避免將所有的文件載入內存,僅在使用的時候讀入所需內容。數據的處理和清洗通常使用分塊的方式處理,可以大大降低內存的使用,同時耗時要相對長一些。

輸出

read_csv——iterator參數

指定iterator=True 也可以返回一個可迭代對象TextFileReader。

輸出


其他方式

除了通過分塊避免一次性將全部內容加載至內存中,還可以嘗試如下方式讀取超大csv文件進行數據分析、處理。

  1. 對數據進行降維
  2. 增大機器內存或使用spark集群(pyspark)


若對你有幫助,點贊支持哦。

評論0 贊同0
  •  加載中...

相關問題

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<