Re: [問題] 完全新手問題 有關csv產出

看板Python作者 (阿真)時間6年前 (2018/09/22 13:19), 6年前編輯推噓0(000)
留言0則, 0人參與, 6年前最新討論串2/2 (看更多)
當資料量很大的時候 一次讀進記憶體是很辛苦的事 若能一次讀完進 速度原則上較快(但體感較慢) 而且 就是有機會讀不進啊 就算這次讀進了 難保下個檔案更大(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

09/22 01:27,
可以改用pandas的dataframe來做 可能會好做一點
09/22 01:27

09/22 01:47,
你的y是有csv副檔名的,if y in fcolumn1可能找不到東
09/22 01:47

09/22 01:47,
西?
09/22 01:47

09/22 02:15,
有好的解決方法嗎?
09/22 02:15

09/22 02:15,
如果一次跑太多筆資料 要怎麼防呆
09/22 02:15

09/22 02:19,
把y改成column1應該就行了? 不知道你想做的是不是這
09/22 02:19

09/22 02:19,
09/22 02:19
是的 小資料可以跑了 但原始資料跑不了 不知道如何 解決 就是讀完一筆資料後 跳下一 筆 ※ 編輯: meichiang (1.161.133.180), 09/22/2018 11:15:23

09/22 11:25,
可以試看看pandas
09/22 11:25

09/22 12:27,
跑不了是跑不完嗎?還是跑完沒結果?這不一樣
09/22 12:27

09/22 12:29,
這寫法是全部都讀到memory做,一千多萬筆是有點多,有可
09/22 12:29

09/22 12:29,
能吃不下,還要看一筆有多大
09/22 12:29
-- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.111.148 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1537593564.A.65B.html
文章代碼(AID): #1RfT3SPR (Python)
文章代碼(AID): #1RfT3SPR (Python)