附加数组中断程序

时间:2014-06-18 19:37:13

标签: python arrays

我正在编写一个程序来分析我们的一些发票数据。基本上,我需要一个包含我们过去一年发出的每张发票的数组。使用dateSeperate()函数将其分解为包含该月发票的十二个数组,以便monthly_transactions [0]返回Januaries事务,monthly_transactions [1]返回Februaries&等等。

我设法让它工作,以便dateSeperate返回monthly_transactions [0]作为1月交易。但是,一旦输入了所有的1月数据,我就会尝试使用第44行附加monthly_transactions数组。但是,这只会导致程序中断&变得不负责任。代码仍然执行&并没有返回错误,但Python变得没有响应&我必须强行推出它。

我一直在编写全局数组monthly_transactions。只要我不包含最后一个else语句,dateSeperate就可以正常运行。如果我这样做,monthly_transactions [0]返回一个包含所有1月发票的数组。这个问题出现在我的最后一个else语句中,当添加时,会导致Python冻结。

任何人都可以帮我解释一下吗?

我编写了一个程序,定义了我将要使用的所有数组(是的,我知道全局数组不好。我是一个尝试学习编程的营销人员,所以任何输入你可以给我如何非常感谢提高这一点

import csv
line_items = []
monthly_transactions = []
accounts_seperated = []

然后我导入所有数据并将其放入line_items数组

def csv_dict_reader(file_obj):
    global board_info 
    reader = csv.DictReader(file_obj, delimiter=',')
    for line in reader:
        item = []
        item.append(line["company id"])
        item.append(line["user id"])
        item.append(line["Amount"])
        item.append(line["Transaction Date"])
        item.append(line["FIrst Transaction"])
        line_items.append(item)
if __name__ == "__main__":
    with open("ChurnTest.csv") as f_obj:
        csv_dict_reader(f_obj)

#formats the transacation date data to make it more readable
def dateFormat():
    for i in range(len(line_items)):
        ddmmyyyy =(line_items[i][3])
        yyyymmdd = ddmmyyyy[6:] + "-"+ ddmmyyyy[:2] + "-"  + ddmmyyyy[3:5]
        line_items[i][3] = yyyymmdd

#Takes the line_items array and splits it into new array monthly_tranactions, where each value holds one month of data
def dateSeperate():
    for i in range(len(line_items)):
        #if there are no values in the monthly transactions, add the first line item
        if len(monthly_transactions) == 0:
            test = []
            test.append(line_items[i])
            monthly_transactions.append(test)
      # check to see if the line items year & month match a value already in the monthly_transaction array.
        else:
            for j in range(len(monthly_transactions)):
                line_year = line_items[i][3][:2]
                line_month = line_items[i][3][3:5]
                array_year = monthly_transactions[j][0][3][:2]
                array_month = monthly_transactions[j][0][3][3:5]
                #print(line_year, array_year, line_month, array_month)
                #If it does, add that line item to that month
                if line_year == array_year and line_month == array_month:
                    monthly_transactions[j].append(line_items[i])
                #Otherwise, create a new sub array for that month
                else:
                    monthly_transactions.append(line_items[i])
dateFormat()
dateSeperate()
print(monthly_transactions)

我真的非常感谢你们在这段代码上给我的任何想法或反馈。

1 个答案:

答案 0 :(得分:0)

基于对OP的评论,您的csv_dict_reader函数似乎完全按照您的意愿执行,至少因为它将其参数csv文件中的数据附加到顶级变量{{1 }}。您自己说过,如果您打印出line_items,它会显示您想要的数据。

“但附加不起作用。”我认为你的意思是将line_items附加到line_items没有完成。原因是你没有告诉程序这样做!您正在谈论的附加内容是作为monthly_transactions函数的一部分完成的,但您仍需要调用该函数。

我不确定您要如何使用dateSeparatedateFormat函数,但为了使用它们,您需要将它们作为调用以某种方式包含在main函数中,即{ {1}}和dateSeparate

编辑:您已经在上一个dateFormat()部分创建了无限循环的潜力,如果行/数组年/月不是dateSeparate()则延长{1}}不相等。这是有问题的,因为它在循环else:内。如果每次monthly_transactions的长度增加1,则此循环将永远不会结束。