作者KSJ (阿真)
看板Python
標題Re: [問題] 完全新手問題 有關csv產出
時間Sat Sep 22 13:19:21 2018
當資料量很大的時候 一次讀進記憶體是很辛苦的事
若能一次讀完進 速度原則上較快(但體感較慢)
而且 就是有機會讀不進啊
就算這次讀進了 難保下個檔案更大(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