(Python) - 需要一些涉及CSV编写器的帮助

时间:2016-04-21 00:22:18

标签: python csv

我和我正在建立一个程序来记录现金/信贷费用并将其写入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

1 个答案:

答案 0 :(得分:1)

问题在于writer.writerow((key + value))行。 writerow()方法采用Python iterable,大致是#34;你可以给for循环的任何东西"。 writerow()接受迭代,迭代它,并将它从迭代中获得的每个元素放入CSV中的单元格 - 它在它们之间放置逗号(并进行其他格式化)。

您传入的值是一个字符串(连接keyvalue的结果),当您迭代字符串时,您将获得每个字符:

>>> for letter in "hello":
...     print letter
...
h
e
l
l
o

因此,当组合字符串只有2个字符长 - 因为费用代码总是1位数,而费用金额也是1位数 - 你得到2列;但如果费用金额是2(或更多)数字,您将获得额外的列。

从你用括号key + value表达的括号来判断,我猜你要做的是将一个元组传递给writerow()。要做到这一点,你想使用(key, value) - 逗号使它成为一个元组。