lin*_*ing 2 python memory file
有一个很大的CSV文件(第一行作为标题),现在我想要100个样本(line_num%100例如),如何有效地使用主内存约束?
将文件分成100个较小的一个.或者每1/100行作为子文件1,每2/100行作为子文件2,...,每100/100行作为文件100.获得100个大小约600的文件M.
没有获得100行或1/100大小的样本.
我试着像这样执行:
fi = [open('split_data//%d.csv'%i,'w') for i in range(100)]
i = 0
with open('data//train.csv') as fin:
first = fin.readline()
for line in fin:
fi[i%100].write(line)
i = i + 1
for i in range(100):
fi[i].close()
Run Code Online (Sandbox Code Playgroud)
但是文件太大而无法运行它有限的内存,如何处理呢?我想用一轮〜来做
(我的代码有效,但它消耗了太多时间,我错误地认为它崩溃了,对不起~~)
如评论中所述将文件拆分为100个部分(我想以模数方式将文件拆分为100个部分,即范围(200) - > | [0,100]; [1,101]; [2,102]和是,单独一个大到几百个小文件)
import csv
files = [open('part_{}'.format(n), 'wb') for n in xrange(100)]
csvouts = [csv.writer(f) for f in files]
with open('yourcsv') as fin:
csvin = csv.reader(fin)
next(csvin, None) # Skip header
for rowno, row in enumerate(csvin):
csvouts[rowno % 100].writerow(row)
for f in files:
f.close()
Run Code Online (Sandbox Code Playgroud)
您可以islice使用步骤而不是模数行号来覆盖文件,例如:
import csv
from itertools import islice
with open('yourcsv') as fin:
csvin = csv.reader(fin)
# Skip header, and then return every 100th until file ends
for line in islice(csvin, 1, None, 100):
# do something with line
Run Code Online (Sandbox Code Playgroud)
例:
r = xrange(1000)
res = list(islice(r, 1, None, 100))
# [1, 101, 201, 301, 401, 501, 601, 701, 801, 901]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
546 次 |
| 最近记录: |