Python如何處理大數(shù)據(jù)?3個(gè)技巧效率提升攻略(推薦)
如果你有個(gè)5、6 G 大小的文件,想把文件內(nèi)容讀出來做一些處理然后存到另外的文件去,你會(huì)使用什么進(jìn)行處理呢?不用在線等,給幾個(gè)錯(cuò)誤示范:有人用multiprocessing 處理,但是效率非常低。于是,有人用python處理大文件還是會(huì)存在效率上的問題。因?yàn)樾手皇呛皖A(yù)期的時(shí)間有關(guān),不會(huì)報(bào)錯(cuò),報(bào)錯(cuò)代表程序本身出現(xiàn)問題了~
所以,為什么用python處理大文件總有效率問題?
如果工作需要,立刻處理一個(gè)大文件,你需要注意兩點(diǎn):
01、大型文件的讀取效率
面對(duì)100w行的大型數(shù)據(jù),經(jīng)過測(cè)試各種文件讀取方式,得出結(jié)論:
with open(filename,"rb") as f: for fLine in f: pass
方式最快,100w行全遍歷2.7秒。
基本滿足中大型文件處理效率需求。如果rb改為r,慢6倍。但是此方式處理文件,fLine為bytes類型。但是python自行斷行,仍舊能很好的以行為單位處理讀取內(nèi)容。
02、文本處理效率問題
這里舉例ascii定長(zhǎng)文件,因?yàn)檫@個(gè)也并不是分隔符文件,所以打算采用列表操作實(shí)現(xiàn)數(shù)據(jù)分割。但是問題是處理20w條數(shù)據(jù),時(shí)間急劇上升到12s。本以為是byte.decode增加了時(shí)間。遂去除decode全程bytes處理。但是發(fā)現(xiàn)效率還是很差。
最后用最簡(jiǎn)單方式測(cè)試,首次運(yùn)行,最簡(jiǎn)單方式也要7.5秒100w次。
想知道這個(gè)方式處理的完整代碼是什么嗎?掃描文末二維碼,聯(lián)系小編可以獲取哦~
那么關(guān)于python處理大文件的技巧,從網(wǎng)絡(luò)整理三點(diǎn):列表、文件屬性、字典三個(gè)點(diǎn)來看看。
1.列表處理
def fun(x):盡量選擇集合、字典數(shù)據(jù)類型,千萬不要選擇列表,列表的查詢速度會(huì)超級(jí)慢,同樣的,在已經(jīng)使用集合或字典的情況下,不要再轉(zhuǎn)化成列表進(jìn)行操作,比如:
values_count = 0 # 不要用這種的 if values in dict.values(): values_count += 1 # 盡量用這種的 if keys,values in dict: values_count += 1
后者的速度會(huì)比前者快好多好多。
2. 對(duì)于文件屬性
如果遇到某個(gè)文件,其中有屬性相同的,但又不能進(jìn)行去重操作,沒有辦法使用集合或字典時(shí),可以增加屬性,比如將原數(shù)據(jù)重新映射出一列計(jì)數(shù)屬性,讓每一條屬性具有唯一性,從而可以用字典或集合處理:
return '(' + str(x) + ', 1)' list(map(fun,[1,2,3]))
使用map函數(shù)將多個(gè)相同屬性增加不同項(xiàng)。
3. 對(duì)于字典
多使用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函數(shù)返回的是鍵值對(duì)的元組的列表,而iteritems使用的是鍵值對(duì)的generator,items當(dāng)使用時(shí)會(huì)調(diào)用整個(gè)列表 iteritems當(dāng)使用時(shí)只會(huì)調(diào)用值。
除了以下5個(gè)python使用模塊,你還有什么技巧解決大文件運(yùn)行效率的問題嗎?深入了解更多Python實(shí)用模塊,快速提升工作效率~
讀寫文件技術(shù),今后會(huì)用到測(cè)試數(shù)據(jù)的參數(shù)化和測(cè)試報(bào)告寫作功能中~
數(shù)據(jù)處理技術(shù),今后測(cè)試腳本的測(cè)試數(shù)據(jù)處理過程可以用到~
數(shù)據(jù)統(tǒng)計(jì)分析技術(shù),今后會(huì)在測(cè)試結(jié)果分析中用到
圖表展示技術(shù),在今后的測(cè)試框架中相關(guān)測(cè)試報(bào)告會(huì)用到
程序自動(dòng)觸發(fā)技術(shù),可用于測(cè)試腳本程序的自動(dòng)執(zhí)行。
以上所述是小編給大家介紹的Python如何處理大數(shù)據(jù)?3個(gè)技巧效率提升攻略詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- python中的PywebIO模塊制作一個(gè)數(shù)據(jù)大屏
- Python PyWebIO實(shí)現(xiàn)網(wǎng)頁(yè)版數(shù)據(jù)查詢器
- python人工智能tensorflow優(yōu)化器Optimizer算法匯總
- python優(yōu)化數(shù)據(jù)預(yù)處理方法Pandas pipe詳解
- python編程學(xué)習(xí)使用管道Pipe編寫優(yōu)化代碼
- python人工智能深度學(xué)習(xí)算法優(yōu)化
- Python數(shù)學(xué)建模學(xué)習(xí)模擬退火算法多變量函數(shù)優(yōu)化示例解析
- Python PyWebIO提升團(tuán)隊(duì)效率使用介紹
相關(guān)文章
Django修改app名稱和數(shù)據(jù)表遷移方案實(shí)現(xiàn)
這篇文章主要介紹了Django修改app名稱和數(shù)據(jù)表遷移方案實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09python GUI庫(kù)圖形界面開發(fā)之PyQt5瀏覽器控件QWebEngineView詳細(xì)使用方法
這篇文章主要介紹了python GUI庫(kù)圖形界面開發(fā)之PyQt5瀏覽器控件QWebEngineView詳細(xì)使用方法,需要的朋友可以參考下2020-02-02python使用信號(hào)量動(dòng)態(tài)更新配置文件的操作
這篇文章主要介紹了python使用信號(hào)量動(dòng)態(tài)更新配置文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python實(shí)現(xiàn)返回?cái)?shù)組中第i小元素的方法示例
這篇文章主要介紹了Python實(shí)現(xiàn)返回?cái)?shù)組中第i小元素的方法,結(jié)合實(shí)例形式分析了Python針對(duì)數(shù)組的遍歷、排序、運(yùn)算等相關(guān)操作技巧,需要的朋友可以參考下2017-12-12Python生成隨機(jī)驗(yàn)證碼代碼實(shí)例解析
這篇文章主要介紹了Python生成隨機(jī)驗(yàn)證碼代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06在django項(xiàng)目中,如何單獨(dú)運(yùn)行某個(gè)python文件
這篇文章主要介紹了在django項(xiàng)目中單獨(dú)運(yùn)行某個(gè)python文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-04-04python實(shí)現(xiàn)視頻抽幀與添加背景音頻和字幕朗讀的腳本分享
這篇文章主要為大家詳細(xì)介紹了如何使用python實(shí)現(xiàn)視頻抽幀、添加srt字幕朗讀、添加背景音頻等功能,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11