我和我正在建立一个程序来记录现金/信贷费用并将其写入CSV文件。根据我们的代码,我们希望能够传达正在进行的费用类型(1 =娱乐,2 =食品/杂货等)以及费用是多少。当费用金额为单个数字时,代码效果很好,例如[1] [5],这意味着它是5美元的娱乐费用。但是,当我们花费时,让我们说55美元,当我们打开CSV文件时,它会进一步将其分为[1] [5] [5]。有没有办法可以改变我们如何在CSV文件中分隔我们的价值观,例如将[1] [55]写成娱乐费用的55美元?
以下相关代码段供参考。预先感谢您的帮助。哦,我们正在使用Python 2.7进行编程。
if expense_type == '1':
print 'Enter Expense Type and Amount\n' \
'1. Entertainment\n' \
'2. Food/Groceries\n' \
'3. Gas/Maintenance/Travel\n' \
'4. School/Work\n' \
'5. Misc.\n'
while True:
exp_type = raw_input('Enter Expense Type Option Number\n')
exp_amt = raw_input('Enter Expense Amount')
cash_exp_log[exp_type] = exp_amt
print 'Would You Like To Record Another Cash Expense?'
go_again = raw_input('Y/N\n')
if go_again == 'N':
break
with open('cash_exp.csv', 'a+') as csvfile:
writer = csv.writer(csvfile)
for key, value in cash_exp_log.items():
writer.writerow((key + value))
break
答案 0 :(得分:1)
问题在于writer.writerow((key + value))
行。 writerow()
方法采用Python iterable,大致是#34;你可以给for循环的任何东西"。 writerow()
接受迭代,迭代它,并将它从迭代中获得的每个元素放入CSV中的单元格 - 它在它们之间放置逗号(并进行其他格式化)。
您传入的值是一个字符串(连接key
和value
的结果),当您迭代字符串时,您将获得每个字符:
>>> for letter in "hello":
... print letter
...
h
e
l
l
o
因此,当组合字符串只有2个字符长 - 因为费用代码总是1位数,而费用金额也是1位数 - 你得到2列;但如果费用金额是2(或更多)数字,您将获得额外的列。
从你用括号key + value
表达的括号来判断,我猜你要做的是将一个元组传递给writerow()
。要做到这一点,你想使用(key, value)
- 逗号使它成为一个元组。