2017-03-09 2 views
1

Hallo, ich hatte gehofft, jemand könnte mir mit meiner College-Kursarbeit helfen, ich habe ein Problem mit meinem Code. Ich bekomme immer wieder einen Speicherfehler mit meinem Datenexport.Speicherfehler beim Exportieren von Daten in CSV-Datei

Gibt es eine Möglichkeit, den verwendeten Speicher zu reduzieren oder gibt es einen anderen Ansatz?

Für die Kursarbeit habe ich eine Datei mit 300 Datensätzen über Kundenaufträge aus einer CSV-Datei erhalten und dann muss ich die Freitag-Datensätze in eine neue CSV-Datei exportieren. Auch ich bin verpflichtet, die populärste Methode für Kundenaufträge und das gesamte Geld, das von den Aufträgen erhoben wird, zu drucken, aber ich habe einen einfachen Plan dafür.

Dies ist mein erstes Mal mit CSV arbeiten, so dass ich nicht sicher bin, wie es geht. Wenn ich das Programm starte, stürzt es sofort ab oder reagiert nicht mehr. Sobald es mit "MEMORY ERROR" erschienen ist, ist das alles, womit es erschienen ist. Ich benutze einen Computer zur Verfügung gestellt College, so dass ich bin mir nicht sicher über die genauen Angaben, aber ich weiß, es läuft 4 GB Speicher.

definieren Zählung OCCURENCES vordefinierte Funktion

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

benutzerdefinierte Funktionen für das Programm Datainput Funktion zum Sammeln von Daten von bereitgestellt Datei verwendet Erstellung

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 

My ersten Versuch einer CSV-Datei zu schreiben

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 

Mein zweiter Versuch zur CSV beim Schreiben

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

erstens können Sie die genaue Fehlermeldung hinzufügen, die Sie bekommen? 2. Überprüfen Sie, ob auf Ihrem Computer genügend Speicherplatz vorhanden ist. – DrBwts

+0

In der Beschreibung des Problems habe ich erwähnt, mit was es erscheint. Es erschien nur mit "Memory Error" –

+0

Nebenbei ... Sie schließen Ihre Dateien nicht ordnungsgemäß. Sie sollten 'with open()' verwenden, um die Datei automatisch zu schließen oder 'f.close()' (mit Klammern) zu verwenden. Und die erste Funktion ('countOccurences') ist redundant. Wenn das Array eine Liste ist, können Sie die 'list.count' Methode verwenden –

Antwort

1

In der Funktion write_file(recordArray) in Ihrem zweiten Versuch Datei der Zählervariablen counter in der ersten while Schleife nie aktualisiert werden, so dass die Schleife für immer fortgesetzt, bis Sie über genügend Arbeitsspeicher ausgeführt.

+0

Danke ich dachte, das würde funktionieren, aber ich habe es gerade ausprobiert und es scheint immer noch nicht genug Speicher zu haben. Ich habe counter = counter + 1 nur am Ende der While-Schleife hinzugefügt –

Verwandte Themen