【问题标题】:python write out to csv filepython写出到csv文件
【发布时间】:2017-03-09 20:41:41
【问题描述】:

我是python的初学者。如何修改下面的代码以将列表写入具有 2 列输出的 csv 文件,如下所示。

1 1
2 1
3 1
4 1
5 1

现在,输出如下

(1, 1)
(2, 1)
(3, 1)
(4, 1)
(5, 1)


list = [(1,1),(2,1),(3,1),(4,1),(5,1)]
with open(test.csv, 'wb') as testfile:
    csv_writer = csv.writer(testfile)
    for i in list:
        csv_writer.writerow([i])

非常感谢您的帮助。

【问题讨论】:

  • csv_writer.writerow(i) 会去掉括号,但逗号仍然存在......足够接近了吗?
  • csv_writer.writerow(str(i[0])+' '+str(i[1]))
  • @user1753919 谢谢!这正是我想要的。
  • @Kevin 您的回答也有效。谢谢!

标签: python csv


【解决方案1】:
import csv
list = [(1,1),(2,1),(3,1),(4,1),(5,1)]
with open('test.csv', 'wb') as testfile:
    csv_writer = csv.writer(testfile)
    for i in list:
        csv_writer.writerow(str(i[0])+' '+str(i[1]))

【讨论】:

    【解决方案2】:

    您正在将元组写入文件,而不是将元组的每个元素写入文件。在下面试试这个。让我知道这是否会给您带来错误。

    list = [(1,1),(2,1),(3,1),(4,1),(5,1)]
    with open(test.csv, 'wb') as testfile:
        csv_writer = csv.writer(testfile)
        for i in list:
            csv_writer.writerow(i[0] + ' ' + i[1])
    

    【讨论】:

    • 使用 csv_writer.writerow(i[0] + ' ' + i[1]),我收到此错误。 TypeError:只能将元组(不是“str”)连接到元组
    • 我认为 user1753919 的解决方案效果最好。我忘了你必须将类型更改为字符串所以 str(i[0]) + ' ' + str(i[1]);这会给你一个错误吗?
    • 另外,我认为 Apero 的解决方案会奏效。您可以将字符串的 %d 更改为 %s,而不是十进制整数。
    • str(i[0]) + ' ' + str(i[1]) 和 csv_writer.writerow(i) 都有效。 @Apero 的解决方案也可以使用 %d 或 %s 可能是因为我正在使用的数据。感谢您的帮助!
    【解决方案3】:

    csv.writer 方法采用可迭代对象。 i 变量已经是一个元组,因此您无需将其设为列表。通过将 i 包含在 [] 中,您可以将其转换为元组列表:[(1, 2)]。然后 csv.writer 获取您的列表并将其拆分为 (1, 2) 的元组,作为行中的第一项。

    假设您想为分隔符而不是逗号留出空格,您需要执行以下操作:1) 在对 csv.writer 的调用中添加分隔符参数,以及 2) 去掉括号。

    此外,您可能希望将打开文件的方式更改为“w”。 CSV 文件应该是纯文本,因此您可能不想将其编写为二进制文件。

    以下是我将如何更改代码。

    list = [(1,1),(2,1),(3,1),(4,1),(5,1)]
    with open('test.csv', 'w') as testfile:
        csv_writer = csv.writer(testfile, delimiter=' ')
        for i in list:
            csv_writer.writerow(i)
    

    【讨论】:

    • 非常感谢您的详细解释!
    【解决方案4】:

    您的列表是由对组成的,只需对其进行迭代并将对传递给字符串模板进行格式化:

    import csv
    list = [(1,1),(2,1),(3,1),(4,1),(5,1)]
    with open('test.csv', 'wb') as testfile:
        csv_writer = csv.writer(testfile)
        for pair in list:
            csv_writer.writerow('%d %d' % pair)
    

    【讨论】:

    • 虽然欢迎使用此代码 sn-p,并且可能会提供一些帮助,但它会是 greatly improved if it included an explanation of howwhy 这解决了问题。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人!请edit您的答案添加解释,并说明适用的限制和假设。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 2022-12-28
    • 2016-03-21
    • 2022-01-09
    • 1970-01-01
    相关资源
    最近更新 更多