我试图四处寻找这个解决方案,但一直无法找到它。我的代码中有这一行:
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`
答案 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