如何将列表中的列表格式化为CSV文件?

时间:2018-06-18 12:34:39

标签: python csv

我试图四处寻找这个解决方案,但一直无法找到它。我的代码中有这一行: AccountDetails.append([row[0],str(row[1]),response["status"],[],0,0,0,0,0])

我正在尝试将其另存为CSV文件:

with open(today + '.csv', 'ab') as File: writer = csv.writer(File) writer.writerows(AccountDetails)

我遇到的问题是我在AccountDetails中的列表(元素4)。当我将当前所拥有的内容打印到CSV文件时,它会在第1列中打印行[0],在第2列中打印行[1]等,但对于列表[],它会将所有内容打印到一个单元格中。我想要的是列表中的所有信息都在他们自己的专栏中。基本上,CSV看起来像这样:

**ID Status SubStat List** 123 on connected 12pm,ID33,Yes/No,etc

其中Info是我的[]列表,我希望它看起来像这样:

**ID Status SubStat TheTime Serial App ** 123 on connected 12pm ID33 Yes/No

不确定这是否相关,但这是子列表,它正在从另一个名为reader的CSV文件中读取数据:

`my_reader = list(reader)

for row in my_reader:        
    for detail in AccountDetails:
        if(detail[0] == row[1]):
            detail[3].append([row[0],#3#0 subdevice id
                              row[3], #3#1 subdevice model
                              row[4], #3#2 subdevice status,
                              row[6],0] #3#3 last contact
                               ) #3#4 Delivered, used later

            break`

1 个答案:

答案 0 :(得分:0)

如果我理解你的身份,你想要将内部列表解压缩到外部列表中,这样内容就会分布在生成的CSV中的不同列中。在这种情况下,请尝试[..., *inner_list, ...]

>>> lst = [1,2,3]
>>> row = ["first", "second", "third", *lst, 0, 0, 0]
>>> with open("test.csv", "w") as f:
        csv.writer(f).writerow(row)

生成的CSV将如下所示:

first,second,third,1,2,3,0,0,0
如果没有*

,则选择

first,second,third,"[1, 2, 3]",0,0,0

在旧版本的Python Python中,这是不可能的。然后你必须将列表构造为

>>> row = ["first", "second", "third"] + lst + [0, 0, 0]

当然,这两种方法在解包时都会“破坏”内部列表,即row[3].append(...)不再起作用,因为row[3]现在不是内部列表,而是第一个元素该列表(如果它是空的,则是它之后的第一个元素)。在将其打包到lst之前填充row,或在没有*的情况下添加>>> row = ["first", "second", "third", [], 0, 0, 0] >>> row[3].extend([1,2,3]) >>> [x for l in (a if isinstance(a, list) else [a] for a in row) for x in l] ['first', 'second', 'third', 1, 2, 3, 0, 0, 0] ,并在将其写入CSV之前将其展平:

td