看板 Python 關於我們 聯絡資訊
當資料量很大的時候 一次讀進記憶體是很辛苦的事 若能一次讀完進 速度原則上較快(但體感較慢) 而且 就是有機會讀不進啊 就算這次讀進了 難保下個檔案更大(3000萬?) 所以一般我們會先開啟檔案 需要資料時再讀取使用 先確定找得到檔案 x = open(....) f = open(....) 之後不會直接readlines() 通通一次讀進memory太操了 雖然檔案小的時候較方便 較快速 通常會用 for xline in x: #find column name #make csv file name #open csv file for write for fline in f: #check fline need write or not #by using column name compare #write csv file 這邊其實是寫進memory增加效能 但如果這裡也太大也會出問題 可以在n個loop之間適時加入flush寫回硬碟 確保記憶體不會用爆 file_name.flush() file_name.close() #close csv file for saving to disk 要注意for過一次的f已經讀到最尾端了 要讓下個for再重跑f 要seek回最前端 f.seek(0) #讓檔案重頭再讀 最後要關檔案養成好習慣 x.close() f.close() 或一開始用with open() as f:之類的寫法 程式邏輯怎麼寫 寫對寫錯又是另一回事了 這裡不多談 用pandas也行 但這種大檔又沒效率要求的情況 一般python練練功真心覺得不錯:D 以上供參考 有錯請指正 ※ 引述《meichiang (美江)》之銘言: 手邊有一大筆資料 1千多萬的資料 第一欄位 為商品代碼 之後欄位為這商品的其 他資料 總共有一千多萬筆資料 要將一個大的 csv檔根據第一欄的商品代碼 根據商品代碼另 存為csv檔 由於沒寫過程式 爬文慢慢寫出 以下東西 但感覺錯了 用小筆資料跑 明顯的跑錯只開了 根據商品別開csv 但csv內沒讀取到資料 https://i.imgur.com/Tl2oDh9.jpg
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.161.133.180 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1537550310.A.123.html
shadowfu: 可以改用pandas的dataframe來做 可能會好做一點09/22 01:27
jackwang01: 你的y是有csv副檔名的,if y in fcolumn1可能找不到東09/22 01:47
jackwang01: 西?09/22 01:47
meichiang: 有好的解決方法嗎?09/22 02:15
meichiang: 如果一次跑太多筆資料 要怎麼防呆09/22 02:15
jackwang01: 把y改成column1應該就行了? 不知道你想做的是不是這09/22 02:19
jackwang01: 樣09/22 02:19
是的 小資料可以跑了 但原始資料跑不了 不知道如何 解決 就是讀完一筆資料後 跳下一 筆 ※ 編輯: meichiang (1.161.133.180), 09/22/2018 11:15:23
DChun: 可以試看看pandas 09/22 11:25
fgghhg: 跑不了是跑不完嗎?還是跑完沒結果?這不一樣 09/22 12:27
fgghhg: 這寫法是全部都讀到memory做,一千多萬筆是有點多,有可 09/22 12:29
fgghhg: 能吃不下,還要看一筆有多大 09/22 12:29
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.111.148 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1537593564.A.65B.html