Python如何處理大資料?3個技巧效率提升攻略
如果你有個5、6 G 大小的檔案,想把檔案內容讀出來做一些處理然後存到另外的檔案去,你會使用什麼進行處理呢?不用線上等,給幾個錯誤示範:有人用multiprocessing 處理,但是效率非常低。於是,有人用python處理大檔案還是會存在效率上的問題。因為效率只是和預期的時間有關,不會報錯,報錯代表程式本身出現問題了~
所以,為什麼用python處理大檔案總有效率問題?
如果工作需要,立刻處理一個大檔案,你需要注意兩點:
01、大型檔案的讀取效率
面對100w行的大型資料,經過測試各種檔案讀取方式,得出結論:
with open(filename,"rb") as f: for fLine in f: pass
方式最快,100w行全遍歷2.7秒。
基本滿足中大型檔案處理效率需求。如果rb改為r,慢6倍。但是此方式處理檔案,fLine為bytes型別。但是python自行斷行,仍舊能很好的以行為單位處理讀取內容。
02、文字處理效率問題
這裡舉例ascii定長檔案,因為這個也並不是分隔符檔案,所以打算採用列表操作實現資料分割。但是問題是處理20w條資料,時間急劇上升到12s。本以為是byte.decode增加了時間。遂去除decode全程bytes處理。但是發現效率還是很差。
最後用最簡單方式測試,首次執行,最簡單方式也要7.5秒100w次。
想知道這個方式處理的完整程式碼是什麼嗎?掃描文末二維碼,聯絡小編可以獲取哦~
那麼關於python處理大檔案的技巧,從網路整理三點:列表、檔案屬性、字典三個點來看看。
Python學習群:556370268,有大牛答疑,有資源共享!有想學習python程式設計的,或是轉行,或是大學生,還有工作中想提升自己能力的,正在學習的小夥伴歡迎加入學習。
1.列表處理
def fun(x):儘量選擇集合、字典資料型別,千萬不要選擇列表,列表的查詢速度會超級慢,同樣的,在已經使用集合或字典的情況下,不要再轉化成列表進行操作,比如:
values_count = 0 # 不要用這種的 if values in dict.values(): values_count += 1 # 儘量用這種的 if keys,values in dict: values_count += 1
後者的速度會比前者快好多好多。
2. 對於檔案屬性
如果遇到某個檔案,其中有屬性相同的,但又不能進行去重操作,沒有辦法使用集合或字典時,可以增加屬性,比如將原資料重新映射出一列計數屬性,讓每一條屬性具有唯一性,從而可以用字典或集合處理:
return '(' + str(x) + ', 1)' list(map(fun,[1,2,3]))
使用map函式將多個相同屬性增加不同項。
3. 對於字典
多使用iteritems()少使用items(),iteritems()返回迭代器:
>>> d = {'a':1,'b':2} >>> for i in d.items() : .... print i ('a',1) ('b',2) >>> for k,v in d.iteritems() : ... print k,v ('a',1) ('b',2)
字典的items函式返回的是鍵值對的元組的列表,而iteritems使用的是鍵值對的generator,items當使用時會呼叫整個列表 iteritems當使用時只會呼叫值。
除了以下5個python使用模組,你還有什麼技巧解決大檔案執行效率的問題嗎?掃一掃來和我們一起交流,深入瞭解更多Python實用模組,快速提升工作效率~
-
讀寫檔案技術,今後會用到測試資料的引數化和測試報告寫作功能中~
-
資料處理技術,今後測試指令碼的測試資料處理過程可以用到~
-
資料統計分析技術,今後會在測試結果分析中用到
-
圖表展示技術,在今後的測試框架中相關測試報告會用到
-
程式自動觸發技術,可用於測試指令碼程式的自動執行。