【问题标题】:Writing Python lists to columns in csv将 Python 列表写入 csv 中的列
【发布时间】:2013-07-16 06:27:32
【问题描述】:

我有 5 个长度相同的列表,我想将它们写入 CSV 中的 5 列。到目前为止,我只能用这段代码写一个到一列:

with open('test.csv', 'wb') as f:
    writer = csv.writer(f)
    for val in test_list:
        writer.writerow([val])

如果我添加另一个 for 循环,它只会将该列表写入同一列。有人知道获得五个单独列的好方法吗?

【问题讨论】:

    标签: python list csv


    【解决方案1】:

    将它们更改为行:

    rows = zip(list1, list2, list3, list4, list5)
    

    那么就:

    import csv
    
    with open(newfilePath, "w") as f:
        writer = csv.writer(f)
        for row in rows:
            writer.writerow(row)
    

    【讨论】:

    • 我得到了类似的东西:array([-23.], dtype=float32), array([-0.39999986], dtype=float32...如何获得没有类型的纯值?
    • 谢谢乔兰!这对我帮助很大,因为我无法使用 Pandas。
    【解决方案2】:

    以下代码将python列表写入csv中的列

    import csv
    from itertools import zip_longest
    list1 = ['a', 'b', 'c', 'd', 'e']
    list2 = ['f', 'g', 'i', 'j']
    d = [list1, list2]
    export_data = zip_longest(*d, fillvalue = '')
    with open('numbers.csv', 'w', encoding="ISO-8859-1", newline='') as myfile:
          wr = csv.writer(myfile)
          wr.writerow(("List1", "List2"))
          wr.writerows(export_data)
    myfile.close()
    

    输出如下所示

    【讨论】:

    • 对于 python 2.7 使用 from itertools import izip_longest as zip_longest 和 newline=''" 将为 python 2.7 抛出错误。为避免此错误,请以 'wb' 模式而不是 'w' 模式打开文件. 这将消除对换行符的需要
    【解决方案3】:

    您可以使用izip 组合您的列表,然后对其进行迭代

    for val in itertools.izip(l1,l2,l3,l4,l5):
        writer.writerow(val)
    

    【讨论】:

    • 值得注意的是,itertools.izip() 在 Python 3.x 中不存在,而内置的 zip() 提供了一个迭代器,因此这是一个直接替换。另请注意,如果您有列表列表,则可以使用解包运算符 (zip(*lists))。这比使用变量l1l2 等更好...
    【解决方案4】:

    如果您乐于使用第 3 方库,您可以使用 Pandas 进行此操作。好处包括无缝访问专门的方法和行/列标签:

    import pandas as pd
    
    list1 = [1, 2, 3]
    list2 = [4, 5, 6]
    list3 = [7, 8, 9]
    
    df = pd.DataFrame(list(zip(*[list1, list2, list3]))).add_prefix('Col')
    
    df.to_csv('file.csv', index=False)
    
    print(df)
    
       Col0  Col1  Col2
    0     1     4     7
    1     2     5     8
    2     3     6     9
    

    【讨论】:

      【解决方案5】:

      我不想导入除 csv 之外的任何内容,而且我的所有列表都有相同数量的项目。这里的最佳答案似乎使列表各成一行,而不是每列一列。因此,我在这里得到了答案并想出了这个:

      import csv
      list1 = ['a', 'b', 'c', 'd', 'e']
      list2 = ['f', 'g', 'i', 'j','k']
      with open('C:/test/numbers.csv', 'wb+') as myfile:
          wr = csv.writer(myfile)
          wr.writerow(("list1", "list2"))
          rcount = 0
          for row in list1:
              wr.writerow((list1[rcount], list2[rcount]))
              rcount = rcount + 1
          myfile.close()
      

      【讨论】:

        【解决方案6】:

        我只是想添加到这个-因为坦率地说,我用头撞了一段时间-虽然对python很陌生-也许它会帮助其他人。

         writer.writerow(("ColName1", "ColName2", "ColName"))
                         for i in range(len(first_col_list)):
                             writer.writerow((first_col_list[i], second_col_list[i], third_col_list[i]))
        

        【讨论】:

          【解决方案7】:
          import csv
          dic = {firstcol,secondcol} #dictionary
          csv = open('result.csv', "w") 
          for key in dic.keys():
              row ="\n"+ str(key) + "," + str(dic[key]) 
              csv.write(row)
          

          【讨论】:

          • 如果您能解释一下为什么这种方法应该有效,并且对已经提出并被接受为答案的方法有所改进,那么您的贡献会更有意义。
          猜你喜欢
          • 2021-11-09
          • 1970-01-01
          • 1970-01-01
          • 2018-11-22
          • 1970-01-01
          • 2014-09-21
          • 2016-06-30
          • 1970-01-01
          相关资源
          最近更新 更多