【问题标题】:Storing values of entire list in the same csv row将整个列表的值存储在同一 csv 行中
【发布时间】:2020-02-03 15:27:11
【问题描述】:

我有一个类似下面的列表

list = [[12,21][32,42],[55,67]]

我只想将列表的值存储在 CSV 文件的单行中,如下所示。

 | row-no | 12 | 21 | 32 | 42 | 55 | 67 |

每个值都保存在 CSV 文件的不同列中。列表的大小也可以在 CSV 文件的不同行中有所不同。

这是我到目前为止所做的:

with open(somefile, 'w') as csvfile:
    InfoWrite = csv.writer(csvfile, delimiter=',')
    InfoWrite.writerow(['row-no','A','B','C','D','E','F'])

    len_list = len(list)
        if(len_list > 0):
            for j in range(len_list):
                InfoWrite.writerow([row-no,list[j][0],list[j][1]])

它给出了以下内容:

| row-no | 12 | 21 |
| row-no | 32 | 42 |
| row-no | 55 | 67 |

我想实现类似于上面显示的输出。感谢您提供任何帮助和建议。

【问题讨论】:

    标签: python list csv


    【解决方案1】:

    您可以使用以下方式展平列表列表:

    matrix = [[12,21], [32,42],[55,67]]
    flatten_matrix = [val for sublist in matrix for val in sublist]
    print(flatten_matrix)
    
    >>> [12, 21, 32, 42, 55, 67]
    

    然后用这个写到csv

    with open(somefile, 'w') as csvfile:
        InfoWrite = csv.writer(csvfile, delimiter=',')
        row_no = 'row-no'
        InfoWrite.writerow([row_no,'A','B','C','D','E','F'])
        InfoWrite.writerow([row_no] + flatten_matrix)
    

    【讨论】:

      【解决方案2】:

      您需要先展平您的列表。一种方法如下

      import itertools
      lst = [[12,21],[32,42],[55,67]]
      lst = list(itertools.chain(*lst))
      # now lst is [12, 21, 32, 42, 55, 67]
      

      附带说明:不要使用内置函数作为变量名 - 您将无法使用这些函数。

      【讨论】:

        【解决方案3】:

        这段代码是用 JavaScript 编写的

        worksheet.eachRow({ includeEmpty: false }, function (row, rowNumber) {
        
                        var insideArray = [];
                        row.eachCell({ includeEmpty: false }, function (cell, colNumber) {
                                insideArray[colNumber-1] = cell.value;
                        });
                       data = data[row]
        

        这不是精确的解决方案,但可以与之相关

        【讨论】:

          【解决方案4】:

          首先你必须展平你的输入列表:

          from functools import reduce
          from operator import add
          import csv
          
          my_list = [[12,21],[32,42],[55,67]]
          flat = reduce(add, my_list) 
          # this will give you [12, 21, 32, 42, 55, 67]
          
          with open('test.csv', 'w') as csvfile:
              InfoWrite = csv.writer(csvfile, delimiter=',')
              InfoWrite.writerow(['row-no','A','B','C','D','E','F'])
              InfoWrite.writerow(['row-no', *flat])
          

          【讨论】:

            猜你喜欢
            • 2020-12-03
            • 1970-01-01
            • 2019-06-19
            • 2022-01-11
            • 2017-05-06
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多