0

I have a code that works fine when I have small CSV's of data but errors out when I try to run large CSV's through it. In essence this code is supposed to place 3 CSV's worth of data into 3 separate dictionaries, combine those dictionaries into a master dictionary, and then preform arithmetic operations on dictionary. The input CSV's look something like this:

time   A  B  C  D
  0    3  4  6  4
.001   4  6  7  8 
.002   4  6  7  3 

The code that I am using is the code displayed below. The error occurs within the lines 47 and 65 where I am try to preform arithmetic with the dictionary. Any explanation as to why this is going on is greatly appreciated.

import numpy

Xcoord = {}
time = []
with open ('Nodal_QuardnetsX2.csv', 'r') as f:
    f.readline() # Skips first line
    for line in f:
        values = [s.strip()for s in line.split(',')]
        Xcoord[values[0]] = map(float, values[1:])
        time.append(values[0])

Ycoord = {}
with open ('Nodal_QuardnetsY2.csv', 'r') as f:

    f.readline() # Skips first line
    for line in f:
        values = [s.strip()for s in line.split(',')]
        Ycoord[values[0]] = map(float, values[1:])

Zcoord = {}
with open ('Nodal_QuardnetsZ2.csv', 'r') as f:
    f.readline() # Skips first line
    for line in f:
        values = [s.strip()for s in line.split(',')]
        Zcoord[values[0]] = map(float, values[1:])

# Create a master dictionary of the form {'key':[[x, y, z], [x, y, z]}   
CoordCombo = {}
for key in Xcoord.keys():
    CoordnateList = zip(Xcoord[key], Ycoord[key], Zcoord[key])
    CoordCombo[key] = CoordnateList

counter = 0
keycount1 = 0
keycount2 = 0.001
difference = []
NodalDisplacements = {}

#Find the difference between the x, y, and z quardnets relative to that point in time
while keycount2 <= float(values[0]): 
        Sub = numpy.subtract(CoordCombo[str(keycount2)][counter], CoordCombo[str(keycount1)][counter])    
        counter = counter + 1
        difference.append(Sub)
        NodalDisplacements[keycount1] = Sub
        keycount1 = keycount1 + 0.001
        keycount2 = keycount2 + 0.001

counter = 0
keycount3 = 0
keycount4 = 0.001

Sum = []
breakpoint = float(values[0])-0.001

while keycount4 <= breakpoint:
    Add = numpy.sum(NodalDisplacements[keycount4][counter], NodalDisplacements[keycount3][counter])
    Sum.append(Add)
    keycount3 = keycount3 + 0.001
    keycount4 = keycount4 + 0.001
    counter = counter + 1
    if counter == 2:
        counter = 0
print Sum

1 Answer 1

0

probably a line of your csv file does not contain 5 elements or the line is empty. In your logic I would suggest to use

for line in f:
   line = line.strip()
   if not line: continue
   if len(values) != N_COLS: continue # or error...
   # other ...

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.