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

2024-09-28 19:24:28 发布

您现在位置:Python中文网/ 问答频道 /正文

# 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内存,过了一段时间,出现了错误消息“内存错误”。你知道吗

我使用intel I-5 CPU10GB RAM。你知道吗

因为我的老板编写了这个程序,他离开了一段时间,而我不是python用户,我不知道如何处理这么大的文件I/O
我怎样才能解决这个问题?你知道吗


Tags: csvdataasnpdirnamestrflattentolist