【问题标题】:How do I write data to csv file in columns and rows from a list in python?如何将数据从 python 列表中的列和行写入 csv 文件?
【发布时间】:2011-11-23 15:14:53
【问题描述】:

我有一个列表列表,我想将它们写入包含列和行的 csv 文件中。我曾尝试使用writerows,但这不是我想要的。我的列表示例如下:

[[1, 2], [2, 3], [4, 5]]

有了这个:

example = csv.writer(open('test.csv', 'wb'), delimiter=' ')
example.writerows([[1, 2], [2, 3], [4, 5]])

我在一个单元格中得到1 2,在一个单元格中得到2 3,等等。而不是在一个单元格中得到1,在下一个单元格中没有2

我需要将此示例列表写入一个文件,因此当我使用 Excel 打开它时,每个元素都在其自己的单元格中。

我的输出应该是这样的:

1 2
2 3
4 5

不同单元格中的每个元素。

【问题讨论】:

  • “在一个单元格中”在 csv 世界中没有多大意义。无论如何,您的代码DOES 会按照您所说的去做。你是如何显示输出文件的??

标签: python list csv


【解决方案1】:

提供的示例使用csv 模块,非常棒!此外,您始终可以使用格式化字符串简单地写入文本文件,如以下试探性示例:

l = [[1, 2], [2, 3], [4, 5]]

out = open('out.csv', 'w')
for row in l:
    for column in row:
        out.write('%d;' % column)
    out.write('\n')
out.close()

我使用; 作为分隔符,因为它最适用于 Excell(您的要求之一)。

希望对你有帮助!

【讨论】:

  • 你有一个额外的;在每一行的末尾。一次写一个单元格很笨重。一种 ;在使用逗号作为小数点的语言环境中,ONLY 最适合 Excel。当他所需要的只是对他对csv.writer 的调用进行一些调整时,为什么要向 OP 展示这个 DIY 东西??
  • @John Machin:其他一些读者可能更喜欢这种方法。如果他已经在使用csv,我怀疑 OP 会回去做 DIY。但我认为 SO 是一个你可以学习新的做事方式并从中选择的地方。此外,通过字符串格式化操作,您还可以使用首选字段分隔符、行尾等。
【解决方案2】:
>>> import csv
>>> with open('test.csv', 'wb') as f:
...     wtr = csv.writer(f, delimiter= ' ')
...     wtr.writerows( [[1, 2], [2, 3], [4, 5]])
...
>>> with open('test.csv', 'r') as f:
...     for line in f:
...         print line,
...
1 2 <<=== Exactly what you said that you wanted.
2 3
4 5
>>>

要获取它以便 Excel 可以合理地加载它,您需要使用逗号(csv 默认值)作为分隔符,除非您位于需要分号的区域(例如欧洲)。

【讨论】:

    【解决方案3】:

    好吧,如果您正在写入 CSV 文件,那么为什么要使用空格作为分隔符? CSV 文件使用逗号或分号(在 Excel 中)作为单元格分隔符,因此如果您使用 delimiter=' ',您并没有真正生成 CSV 文件。您应该使用默认分隔符和方言简单地构造csv.writer。如果您想稍后将 CSV 文件读入 Excel,您可以明确指定 Excel 方言以明确您的意图(尽管此方言是默认方言):

    example = csv.writer(open("test.csv", "wb"), dialect="excel")
    

    【讨论】:

      【解决方案4】:

      试试这些代码:

      >>> import pyexcel as pe
      >>> sheet = pe.Sheet(data)
      >>> data=[[1, 2], [2, 3], [4, 5]]
      >>> sheet
      Sheet Name: pyexcel
      +---+---+
      | 1 | 2 |
      +---+---+
      | 2 | 3 |
      +---+---+
      | 4 | 5 |
      +---+---+
      >>> sheet.save_as("one.csv")
      >>> b = [[126, 125, 123, 122, 123, 125, 128, 127, 128, 129, 130, 130, 128, 126, 124, 126, 126, 128, 129, 130, 130, 130, 130, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 134, 134, 134, 134, 134, 134, 134, 134, 133, 134, 135, 134, 133, 133, 134, 135, 136], [135, 135, 136, 137, 137, 136, 134, 135, 135, 135, 134, 134, 133, 133, 133, 134, 134, 134, 133, 133, 132, 132, 132, 135, 135, 133, 133, 133, 133, 135, 135, 131, 135, 136, 134, 133, 136, 137, 136, 133, 134, 135, 136, 136, 135, 134, 133, 133, 134, 135, 136, 136, 136, 135, 134, 135, 138, 138, 135, 135, 138, 138, 135, 139], [137, 135, 136, 138, 139, 137, 135, 142, 139, 137, 139, 138, 136, 137, 141, 138, 138, 139, 139, 139, 139, 138, 138, 138, 138, 137, 137, 137, 137, 138, 138, 136, 137, 137, 137, 137, 137, 137, 138, 148, 144, 140, 138, 137, 138, 138, 138, 137, 137, 137, 137, 137, 138, 139, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141], [141, 141, 141, 141, 141, 141, 141, 139, 139, 139, 140, 140, 141, 141, 141, 140, 140, 140, 140, 140, 141, 142, 143, 138, 138, 138, 139, 139, 140, 140, 140, 141, 140, 139, 139, 141, 141, 140, 139, 145, 137, 137, 145, 145, 137, 137, 144, 141, 139, 146, 134, 145, 140, 149, 144, 145, 142, 140, 141, 144, 145, 142, 139, 140]]
      >>> s2 = pe.Sheet(b)
      >>> s2
      Sheet Name: pyexcel
      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
      | 126 | 125 | 123 | 122 | 123 | 125 | 128 | 127 | 128 | 129 | 130 | 130 | 128 | 126 | 124 | 126 | 126 | 128 | 129 | 130 | 130 | 130 | 130 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 132 | 134 | 134 | 134 | 134 | 134 | 134 | 134 | 134 | 133 | 134 | 135 | 134 | 133 | 133 | 134 | 135 | 136 |
      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
      | 135 | 135 | 136 | 137 | 137 | 136 | 134 | 135 | 135 | 135 | 134 | 134 | 133 | 133 | 133 | 134 | 134 | 134 | 133 | 133 | 132 | 132 | 132 | 135 | 135 | 133 | 133 | 133 | 133 | 135 | 135 | 131 | 135 | 136 | 134 | 133 | 136 | 137 | 136 | 133 | 134 | 135 | 136 | 136 | 135 | 134 | 133 | 133 | 134 | 135 | 136 | 136 | 136 | 135 | 134 | 135 | 138 | 138 | 135 | 135 | 138 | 138 | 135 | 139 |
      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
      | 137 | 135 | 136 | 138 | 139 | 137 | 135 | 142 | 139 | 137 | 139 | 138 | 136 | 137 | 141 | 138 | 138 | 139 | 139 | 139 | 139 | 138 | 138 | 138 | 138 | 137 | 137 | 137 | 137 | 138 | 138 | 136 | 137 | 137 | 137 | 137 | 137 | 137 | 138 | 148 | 144 | 140 | 138 | 137 | 138 | 138 | 138 | 137 | 137 | 137 | 137 | 137 | 138 | 139 | 140 | 141 | 141 | 141 | 141 | 141 | 141 | 141 | 141 | 141 |
      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
      | 141 | 141 | 141 | 141 | 141 | 141 | 141 | 139 | 139 | 139 | 140 | 140 | 141 | 141 | 141 | 140 | 140 | 140 | 140 | 140 | 141 | 142 | 143 | 138 | 138 | 138 | 139 | 139 | 140 | 140 | 140 | 141 | 140 | 139 | 139 | 141 | 141 | 140 | 139 | 145 | 137 | 137 | 145 | 145 | 137 | 137 | 144 | 141 | 139 | 146 | 134 | 145 | 140 | 149 | 144 | 145 | 142 | 140 | 141 | 144 | 145 | 142 | 139 | 140 |
      +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
      >>> s2[0,0]
      126
      >>> s2.save_as("two.csv")
      

      【讨论】:

        【解决方案5】:
        import pandas as pd
        header=['a','b','v']
        df=pd.DataFrame(columns=header)
        for i in range(len(doc_list)):
          d_id=(test_data.filenames[i]).split('\\')
          doc_id.append(d_id[len(d_id)-1])
          df['a']=doc_id
        print(df.head())
        df[column_names_to_be_updated]=np.asanyarray(data)
        print(df.head())
        df.to_csv('output.csv')
        

        使用 pandas 数据框,我们可以写入 csv。 首先根据您在 csv 中存储的需要创建一个数据框。 然后使用 pd.DataFrame.to_csv() API 创建数据帧的 csv。

        【讨论】:

          猜你喜欢
          • 2014-06-27
          • 2012-12-17
          • 2023-02-01
          • 2012-12-11
          • 1970-01-01
          • 2020-06-01
          • 1970-01-01
          相关资源
          最近更新 更多