使用python进行文件I / O时出现内存错误

时间:2015-10-14 03:05:09

标签: python memory file-io

# Header
import numpy as np
import struct

# Main source code
for t in range(4):
    ## file info
    dirName = '../RawData/20150915Data_Simul_SystemReqTest/'
    seed = 101
    ene = 100
    #t = 0
    filePath = dirName + 'csv/seed' + str(seed) + '_nt_cc_t' + str(t) + '.csv'

    ## call data
    rawData = np.loadtxt(filePath, delimiter=',', skiprows=14)

    ## refine data
    for s in range(100):
        #setChk = ((rawData[:,0])//19026509.54==s)
        setChk = ((rawData[:,0]+1e9)//19026509.54==s)
        det1Chk = (rawData[:,5]!=0) & setChk
        det2Chk = (rawData[:,10]!=0) & setChk
        coinChk = det1Chk & det2Chk
        with open(dirName + 'data_' + str(ene) + 'keV_100sep/coin_' + str(ene) + 'keV_' + str(s) + '.bin', 'ab') as fcoin:
            fcoin.write(struct.pack('f'*(len(coinChk.nonzero()[0])*10), *rawData[coinChk, 1:].flatten().tolist()))
        with open(dirName + 'data_' + str(ene) + 'keV_100sep/evtN_' + str(ene) + 'keV_' + str(s) + '.bin', 'ab') as fevtN:
            #evtNdataL = np.int32(rawData[setChk, 0]).flatten().tolist()
            evtNdataL = np.int32(rawData[setChk, 0]+1e9).flatten().tolist()
            evtNdataL.extend(det1Chk[setChk]+(det2Chk[setChk]*2))
            evtNdata = np.array(evtNdataL).reshape([2,len(evtNdataL)/2])
            evtNdataL = evtNdata.T.flatten().tolist()
            fevtN.write(struct.pack('i'*len(evtNdataL), *evtNdataL))
        with open(dirName + 'data_' + str(ene) + 'keV_100sep/tst1_' + str(ene) + 'keV_' + str(s) + '.bin', 'ab') as ftst1:
            ftst1.write(struct.pack('f'*(len(det1Chk.nonzero()[0])), *rawData[det1Chk, 5].flatten().tolist()))
        with open(dirName + 'data_' + str(ene) + 'keV_100sep/tst2_' + str(ene) + 'keV_' + str(s) + '.bin', 'ab') as ftst2:
            ftst2.write(struct.pack('f'*(len(det2Chk.nonzero()[0])), *rawData[det2Chk, 10].flatten().tolist()))
        print(s)

    del rawData
    del det1Chk, det2Chk, coinChk, setChk

    print(t)

您好,
我正在尝试使用python运行文件 I / O 代码并遇到麻烦。 我在这个线程的上半部分显示的代码读取.csv个文件,并按列分隔,并将它们写在输出文件中。

文件名是:

seed101_nt_cc_t0.csv
seed101_nt_cc_t1.csv
seed101_nt_cc_t2.csv
seed101_nt_cc_t3.csv

每个文件都是.csv个文件, 10列,大​​小 3GB
当我运行这个程序时,计算机使用我的整个10GB的RAM,一段时间后,会出现错误信息'内存错误'。

我使用 intel i-5 CPU 10GB内存

因为我的老板编写了这个程序并且他已经关闭了一段时间,我不是python用户,我不知道处理这么大的文件 I / O
我怎么解决这个问题?

0 个答案:

没有答案