Python 这个程序为什么运行过程中总是报错内存占用过大? 40C
 import os
import numpy as np
mydi =os.listdir('G:\\百度导航轨迹数据\\8-9文件处理')
mydi = mydi[1:]

for ifile in mydi:
    inputdir = open('G:\\百度导航数据  起始点经纬度存储\\8-9经纬度新.txt','a')
    f1 = open('G:\\百度导航轨迹数据\\8-9文件处理'+'\\' + ifile)
    f2 = f1.readlines()
    alist = []
    for line in f2:
        line = line.strip()
        line = line.split(',')
        alist.append(line)
    a = np.array(alist)
    [rows,cols] = a.shape


    odlist = []
    pre = 0
    inputdir.write(a[0][4] + ',')
    inputdir.write(a[0][5] + ',')
    if rows > 1:
        for i in range(1,rows,15):
            j = i
            if int(a[i][1]) - int(a[pre][1]) > 515:
                while i > pre:
                    #注意这一步可能有偏差,所以在下面要加上条件。
                    if int(a[i][1]) - int(a[i-1][1]) > 500:
                        break
                    else:
                        i -= 1
                if int(a[i][1]) - int(a[i-1][1]) > 400:
                    inputdir.write(a[i][4]+',')
                    inputdir.write(a[i][5]+',')
            pre = j
        if int(a[rows - 1][1]) - int(a[i][1]) > 500:
            inputdir.write(a[rows-1][4] + ',')
            inputdir.write(a[rows - 1][5] + ',')
        inputdir.write('\n')
    else:
        inputdir.write('\n')
    inputdir.close()

好绝望啊,导入的这个文件夹里总文件大小是2G多,应该不至于内存不够吧,每次都是内存占用很大然后就停止了。
图片说明
有没有大佬看看怎样减小下内存的占用啊,感激不尽

2个回答

这种情况可以考虑“生成器”,下面对代码做了一点小改动(_**已注明**_),由于没有数据,无法保证百分百正确。先试一试吧


import os
import numpy as np
mydi =os.listdir('G:\\百度导航轨迹数据\\8-9文件处理')
mydi = mydi[1:]

#改动一
def readData(file):
    '''创建一个生成器'''
    while file.readline():
        yield file.readline()

for ifile in mydi:
    inputdir = open('G:\\百度导航数据  起始点经纬度存储\\8-9经纬度新.txt','a')
    f1 = open('G:\\百度导航轨迹数据\\8-9文件处理'+'\\' + ifile)

    #改动二
    #f2 = f1.readlines()
    #使用生成器
    f2=readData(f1)

    alist = []
    for line in f2:
        line = line.strip()
        line = line.split(',')
        alist.append(line)
    a = np.array(alist)
    [rows,cols] = a.shape

        。。。省略。。。



文件过大时 不必一下把内容读取,你可以分批来读取并处理,read(size) tell(size) seek(size), 或 readline(n)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问