2017-03-09 161 views
1

您好,我希望有人能帮助我完成大学课程,我的代码有问题。我一直在运行数据导出时遇到内存错误。将数据导出到csv文件时出现内存错误

有什么办法可以减少正在使用的内存,或者我可以采用不同的方法吗?

对于课程工作,我从一个CSV文件中获得一个关于客户订单的300条记录文件,然后我必须将星期五记录导出为新的CSV文件。此外,我需要打印客户订单最流行的方法和订单中筹集的资金,但我有一个简单的计划。

这是我第一次使用CSV,所以我不知道该怎么做。当我运行程序时,它往往会立即崩溃或停止响应。一旦它出现'MEMORY ERROR',但它就是它的全部。我使用的是大学提供的电脑,所以我不确定具体的规格,但我知道它运行4GB的内存。

限定计数OCCURENCES预定函数

def countOccurences(target,array): 
    counter = 0 
    for element in array: 
     if element == target: 
      counter= counter + 1 
    print counter 
    return counter 

为用于从设置文件中收集数据

def dataInput(): 
    import csv 
    recordArray = [] 
    customerArray = [] 

    f = open('E:\Portable Python 2.7.6.1\Choral Shield Data File(CSV).csv') 
    csv_f = csv.reader(f) 

    for row in csv_f: 
     customerArray.append(row[0]) 
     ticketID = row[1] 
     day, area = datasplit(ticketID) 
     customerArray.append(day) 
     customerArray.append(area) 
     customerArray.append(row[2]) 
     customerArray.append(row[3]) 
     recordArray.append(customerArray) 
    f.close 
    return recordArray 

def datasplit(variable): 
     day = variable[0] 
     area = variable[1] 
     return day,area 

def dataProcessing(recordArray): 
    methodArray = [] 
    wed_thursCost = 5 
    friCost = 10 

    record = 0 
    while record < 300: 
     method = recordArray[record][4] 
     methodArray.append(method) 
     record = record+1 

    school = countOccurences('S',methodArray) 
    website = countOccurences('W',methodArray) 

    if school > website: 
     school = True 
    elif school < website: 
     website = True 

    dayArray = [] 
    record = 0 
    while record < 300: 
     day = recordArray[record][1] 
     dayArray.append(day) 
     record = record + 1 

    fridays = countOccurences('F',dayArray) 
    wednesdays = countOccurences('W',dayArray) 
    thursdays = countOccurences('T', dayArray) 

    totalFriCost = fridays * friCost 
    totalWedCost = wednesdays * wed_thursCost 
    totalThurCost = thursdays * wed_thursCost 
    totalCost = totalFriCost + totalWedCost + totalThurCost 

    return totalCost,school,website 

我的第一次尝试写入csv文件

程序 DataInput中函数创建用户定义的函数
def dataExport(recordArray): 
    import csv 
    fridayRecords = [] 
    record = 0 
    customerIDArray = [] 
    ticketIDArray = [] 
    numberArray = [] 
    methodArray = [] 


    record = 0 
    while record < 300: 
     if recordArray[record][1] == 'F': 
      fridayRecords.append(recordArray[record]) 
      record = record + 1 

    with open('\Courswork output.csv',"wb") as f: 
     writer = csv.writer(f) 
     for record in fridayRecords: 
      writer.writerows(fridayRecords) 
     f.close 

我在写作的第二次尝试的CSV文件

def write_file(recordArray): # write selected records to a new csv file 
    CustomerID = [] 
    TicketID = [] 
    Number = [] 
    Method = [] 
    counter = 0 
    while counter < 300: 
     if recordArray[counter][2] == 'F': 
      CustomerID.append(recordArray[counter][0]) 
      TicketID.append(recordArray[counter][1]+recordArray[counter[2]]) 
      Number.append(recordArray[counter][3]) 
      Method.append(recordArray[counter][4]) 
    fridayRecords = [] # a list to contain the lists before writing to file 
    for x in range(len(CustomerID)): 
     one_record = CustomerID[x],TicketID[x],Number[x],Method[x] 
     fridayRecords.append(one_record) 
    #open file for writing 
    with open("sample_output.csv", "wb") as f: 
#create the csv writer object 
     writer = csv.writer(f) 
     #write one row (item) of data at a time 
     writer.writerows(recordArray) 
    f.close 
    counter = counter + 1 

#Main Program 

recordArray = dataInput() 
totalCost,school,website = dataProcessing(recordArray) 
write_file(recordArray) 
+0

首先你可以添加确切的错误信息,你正在得到?第二次检查您的计算机上是否有足够的磁盘空间。 – DrBwts

+0

在对问题的描述中,我提到了它的出现。它出现只是'内存错误' –

+0

另一方面...你没有正确地关闭你的文件。你应该使用'open()'来自动关闭文件或者使用'f.close()'(括号)。第一个函数('countOccurences')是多余的。如果数组是一个列表,你可以使用'list.count'方法 –

回答

1

在功能write_file(recordArray)在你的第二次尝试在第一while循环计数器变量counter从不更新如此循环持续不断,直到你耗尽内存。

+0

谢谢,我认为这会工作,但我刚刚尝试过,它似乎仍然耗尽内存。我在while循环的末尾添加了counter = counter + 1 –

相关问题