как получить сумму списка столбцов CSV для печати - PullRequest
0 голосов
/ 10 декабря 2018

Мне нужно получить сумму второго столбца в CSV.Я пробовал несколько возможных решений, но самое большее, я получаю Totals = set{}, где я ожидаю получить сумму списка, который я создал из второго столбца файла CSV.Мой CSV-файл выглядит следующим образом: enter image description here

Я уверен, что это должно быть простое решение, которое мне не хватает, но я не могу понять это и потратил часы, пытаясь по-другомуварианты, которые я нашел, здесь и на других сайтах.Я был бы очень признателен за любую помощь, чтобы указать мне в правильном направлении.Кроме того, для этого я не могу использовать такие модули, как Pandas.Вот мой код

    import os
    import csv

    budget_csv = os.path.join("../PyBank", "budget_data.csv")

    with open(budget_csv, newline="") as csvfile:
        csvreader = csv.reader(csvfile, delimiter=",")
        #skip header row
        next(csvreader, None) 

        # Gets number of rows in csv
        data=list(csvreader)

        row_count = len(data)

        totals = []
        for row in csvreader:
            values = row[1]
            totals.append(values)

        print (totals) #did this just to see if it would print the list of values



    print ("Financial Analysis")
    print ("-------------------------------")
    print ("Total Months: ", row_count)
    print ("Total: ", sum(totals))
    print ("Average Change: ")
    print ("Greatest Increase in Profits: ")
    print ("Greatest Decrease in Profits: ")



    output_file = os.path.join("Analysis.txt")

    #  Open the output file
    with open(output_file, "w") as text_file:
        text_file.write (f"Financial Analysis\n")
        text_file.write (f"-------------------------------\n")
        text_file.write (f"Total Months: " + str(row_count) + "\n")
        #print (f"Total: {}".format(net))
        #print (f"Average Change: ")
        #print (f"Greatest Increase in Profits: ")
        #print (f"Greatest Decrease in Profits: ")  

Ответы [ 3 ]

0 голосов
/ 10 декабря 2018

когда вы делаете data=list(csvreader), вы использовали csvreader, поэтому он находится в конце файла, и когда вы пытаетесь повторить его снова в этой строке for row in csvreader:, он пуст, а total остается пустым списком.Я также рекомендовал бы использовать csv.DictReader.

Не проверено, но что-то вроде

import os
import csv

budget_csv = os.path.join("../PyBank", "budget_data.csv")

with open(budget_csv, 'r') as csvfile:
    csvreader = csv.DictReader(csvfile, delimiter=",")
    totals = []
    for row_count, row in enumerate(csvreader, start=1):
        value = int(row['Profit/Losses'])
        totals.append(value)


print ("Financial Analysis")
print ("-------------------------------")
print ("Total Months: {}".format(row_count))
print ("Total: {}".format(sum(totals)))
print ("Average Change: ")
print ("Greatest Increase in Profits: ")
print ("Greatest Decrease in Profits: ")



output_file = os.path.join("Analysis.txt")

#  Open the output file
with open(output_file, "w") as text_file:
    text_file.write ("Financial Analysis\n")
    text_file.write ("-------------------------------\n")
    text_file.write ("Total Months: {}\n".format(row_count))
0 голосов
/ 13 декабря 2018

Разобрался, наконец.Созданы две новые переменные.Переименовано totals = [] в totals1 = [].Затем превратили целые числа в totals 1 в числа с плавающей точкой, используя totals2 = [float(integral) for integral in totals1], который использовался для получения суммы с totals3 = sum(totals2).Новый код:

     totals1 = [] for row in data:
         values = row[1] 
         totals1.append(values)          
     totals2 = [float(integral) for integral in totals1] #turns values in totals1 into floats
     totals3 = sum(totals2) 
0 голосов
/ 10 декабря 2018

вам нужно перебирать данные, а не csvreader после того, как csvreader приведен в виде списка.

for row in data:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...