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

作者: KSJ (阿真)   2018-09-22 13:19:21
當資料量很大的時候 一次讀進記憶體是很辛苦的事
若能一次讀完進 速度原則上較快(但體感較慢)
而且 就是有機會讀不進啊
就算這次讀進了 難保下個檔案更大(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
作者: shadowfu (shadow)   2017-09-22 01:27:00
可以改用pandas的dataframe來做 可能會好做一點
作者: jackwang01 (艾斯比那)   2017-09-22 01:47:00
你的y是有csv副檔名的,if y in fcolumn1可能找不到東西?
作者: meichiang (美江)   2017-09-22 02:15:00
有好的解決方法嗎?如果一次跑太多筆資料 要怎麼防呆
作者: jackwang01 (艾斯比那)   2017-09-22 02:19:00
把y改成column1應該就行了? 不知道你想做的是不是這樣
作者: DChun (Ding)   2017-09-22 11:25:00
可以試看看pandas
作者: fgghhg (fgghhg)   2017-09-22 12:27:00
跑不了是跑不完嗎?還是跑完沒結果?這不一樣這寫法是全部都讀到memory做,一千多萬筆是有點多,有可能吃不下,還要看一筆有多大

Links booklink

Contact Us: admin [ a t ] ucptt.com