作者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://webptt.com/cn.aspx?n=bbs/Python/M.1537550310.A.123.html
1F:→ shadowfu: 可以改用pandas的dataframe来做 可能会好做一点09/22 01:27
2F:→ jackwang01: 你的y是有csv副档名的,if y in fcolumn1可能找不到东09/22 01:47
3F:→ jackwang01: 西?09/22 01:47
4F:→ meichiang: 有好的解决方法吗?09/22 02:15
5F:→ meichiang: 如果一次跑太多笔资料 要怎麽防呆09/22 02:15
6F:→ jackwang01: 把y改成column1应该就行了? 不知道你想做的是不是这09/22 02:19
7F:→ jackwang01: 样09/22 02:19
是的 小资料可以跑了 但原始资料跑不了 不知道如何 解决 就是读完一笔资料後 跳下一
笔
※ 编辑: meichiang (1.161.133.180), 09/22/2018 11:15:23
8F:→ DChun: 可以试看看pandas 09/22 11:25
9F:→ fgghhg: 跑不了是跑不完吗?还是跑完没结果?这不一样 09/22 12:27
10F:→ fgghhg: 这写法是全部都读到memory做,一千多万笔是有点多,有可 09/22 12:29
11F:→ fgghhg: 能吃不下,还要看一笔有多大 09/22 12:29
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.231.111.148
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1537593564.A.65B.html