我正在编写一个程序来分析我们的一些发票数据。基本上,我需要一个包含我们过去一年发出的每张发票的数组。使用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)
我真的非常感谢你们在这段代码上给我的任何想法或反馈。
答案 0 :(得分:0)
基于对OP的评论,您的csv_dict_reader
函数似乎完全按照您的意愿执行,至少因为它将其参数csv文件中的数据附加到顶级变量{{1 }}。您自己说过,如果您打印出line_items
,它会显示您想要的数据。
“但附加不起作用。”我认为你的意思是将line_items
附加到line_items
没有完成。原因是你没有告诉程序这样做!您正在谈论的附加内容是作为monthly_transactions
函数的一部分完成的,但您仍需要调用该函数。
我不确定您要如何使用dateSeparate
和dateFormat
函数,但为了使用它们,您需要将它们作为调用以某种方式包含在main函数中,即{ {1}}和dateSeparate
。
编辑:您已经在上一个dateFormat()
部分创建了无限循环的潜力,如果行/数组年/月不是dateSeparate()
则延长{1}}不相等。这是有问题的,因为它在循环else:
内。如果每次monthly_transactions
的长度增加1,则此循环将永远不会结束。