2017-06-09 4 views
0
import csv 

oneFileName = listOfFiles[0] 

lineNum = 0 

listOfLists = [] 

with open(oneFileName,"rt") as csvfile: 
    lineReader = csv.reader(csvfile,delimiter=",",quotechar="\"") 
    for row in lineReader: 
     lineNum = (lineNum + 1) 
     if lineNum == 1: 
      print("Skipping the header row") 
      continue 
     symbol = row[0] 
     close = row[5] 
     prevClose = row[7] 
     tradedQty = row[9] 
     pctChange = float(float(close)/float(prevClose) - 1) 
     oneResultRow = [symbol, pctChange,float(tradedQty)] 
     listOfLists.append(oneResultRow) 
     print(symbol, "{:,.lf}".format(float(tradedQty/1e6), "M INR", "{:,.lf}".format(pctChange*100), "%")) 
    print("Done iterating over the file contents - the file is closed now!") 
    print("We have stock info for " + str(len(listOfLists))) 

listOfListsSortedByQty = sorted(listOfLists, key=lambda x:x[2], reverse=True) 

listOfListsSortedByQty = sorted(listOfLists, key=lambda x: x[1], reverse=True) 

Ich erhalte diese Fehlermeldung:Wird der 1e6 einen Type Error bekommen?

print(symbol, "{:,.lf}".format(float(tradedQty/1e6), "M INR", "{:,.lf}".format(pctChange*100), "%")) 
TypeError: unsupported operand type(s) for /: 'str' and 'float 

Antwort

0

tradedQty eine Zeichenfolge ist. 1e6 ist numerisch und ist nicht das Problem.

Die CSV-Datei besteht nur aus Zeichenfolgen, daher sollten Sie die numerischen Daten in numerische Typen konvertieren. Versuchen Sie tradedQty = float(row[9])

1

Nein, das Problem ist, dass Sie Ihre Klammern an der falschen Stelle setzen.

float(tradedQty/1e6) 
//  ^^^^^^^^^ ^^^ 
//  string float 
// ^^^^^ 
// too late 

Ich bin sicher, Sie schreiben gemeint:

float(tradedQty)/1e6 
Verwandte Themen