【问题标题】:(Python) - Need some help involving the CSV writer(Python) - 需要一些涉及 CSV 编写器的帮助
【发布时间】:2016-04-21 00:22:18
【问题描述】:

我和我的团队正在构建一个程序来记录现金/信贷费用并将其写入 CSV 文件。使用我们的代码,我们希望能够传达支出的类型(1 = 娱乐,2 = 食品/杂货等)以及费用是多少。当费用金额为个位数时,该代码效果很好,例如 [1][5],这意味着这将是 5 美元的娱乐费用。但是,当我们花费 55 美元时,当我们打开 CSV 文件时,它会进一步将其分隔为 [1][5][5]。有没有一种方法可以改变我们在 CSV 文件中分隔值的方式,例如将 [1][55] 表示为 55 美元的娱乐费用?

下面是相关代码sn-p,供参考。预先感谢您的帮助。哦,我们正在使用 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

【问题讨论】:

    标签: python csv


    【解决方案1】:

    问题出在writer.writerow((key + value)) 行。 writerow() 方法采用 Python iterable,大致是“你可以给 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)——逗号使它成为一个元组。

    【讨论】:

      猜你喜欢
      • 2011-06-06
      • 2018-12-07
      • 1970-01-01
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多