Python CSV写入-将行拆分为多列

Python CSV写入-将行拆分为多列,python,csv,Python,Csv,对不起,如果这个问题重复,但我搜索了,找不到一个简单的例子 我正在尝试将字典值写入csv文件。下面是python代码: w = csv.writer(open("../log.csv", "w")) alphanum = {'A':1, 'B':2, 'C':3, 'D':4, 'ZA':27, 'ZB':28, 'ZC':29, 'ZD':30} for key, val in sorted (alphanum.items()): w.writerow([key, val]) 以下是cs

对不起,如果这个问题重复,但我搜索了,找不到一个简单的例子

我正在尝试将字典值写入csv文件。下面是python代码:

w = csv.writer(open("../log.csv", "w"))
alphanum = {'A':1, 'B':2, 'C':3, 'D':4, 'ZA':27, 'ZB':28, 'ZC':29, 'ZD':30}
for key, val in sorted (alphanum.items()):
  w.writerow([key, val])
以下是csv文件中的输出:

|---------|---------|
|A | 1|
|B | 2|
|C | 3|
|D|4|
|扎| 27|
|ZB | 28|
|ZC | 29|
|ZD | 30|
|---------|---------|
但我想拆分行并以以下格式写入:

|---------|---------|---------|---------|
|A | 1 | ZA | 27|
|B | 2 | ZB | 28|
|C | 3 | ZC | 29|
|D | 4 | ZD | 30|
|---------|---------|---------|---------|
编辑

在进一步澄清之后,以下是您正在寻找的解决方案:

导入csv
w=csv.writer(打开(“../log.csv”,“w”))
alphanum={'A':1,'B':2,'C':3,'D':4,'ZA':27,'ZB':28,'ZC':29,'ZD':30}
alphanum_size=len(alphanum)
已排序的\u alphanum=已排序的(alphanum.items())
对于范围内的i(int(alphanum_size/2)):
w、 writerow(已排序的字母数[i]+已排序的字母数[i+4]),如果i+4
如您所见,我们将字典的大小分配给变量
alphanum_size
,以避免
for
循环中的
len()
函数调用过多,这会在一定程度上影响效率

我们还在for循环中使用了一个。这相当于:

如果i+4

最简单的方法是更改您的数据容器,并基本上将其转换为
dict
s的
list

w=open(“../log.csv”,“w”)
alphanum=[{'col1':'A','col2':1','col3':'ZA','col4':27},
{'col1':'B','col2':2',col3':'ZB','col4':28},
...]
然后,您可以使用
DictWriter
轻松执行写入操作

header\u columns=alphanum[0].keys()
writer=csv.DictWriter(w,标题_列)
writer.writeheader()
writer.writerows(alphanum)

这里可以做的另一个改进是使用上下文管理器,而不是常规文件
open()
。您可以阅读这些内容。

一些说明:column1、column2…不在字典中,我编写它们是为了参考,以显示以excel格式打开时它在csv文件中的外观。我尝试编写的字典值非常大,因此不确定是否需要将其转换为列表,这增加了另一个问题,即它是否存在打乱了排序。但是,您到底想要实现什么?您的问题中没有明确说明,如果数据集比示例中提供的数据集大,最好知道需要做些什么来提供适当的有效解决方案。从问题中我得出结论,您希望为每个stackexchange:我同意@Epion的观点,为了能够编写能够处理不同情况的代码,您需要在一般情况下指定所需的内容。请原谅我不清楚。我需要的是:1)alphanum是一本字典,不想将其更改为list。alphanum没有更改。2) 专栏1,专栏2。。。如前一条评论中所述,仅供参考,不希望向字典或列表中添加任何新元素。3) 在这个问题中,我能够生成的输出有8行2列。但我想将其更改为4行4列,如第二种格式所示。4) 一旦我写入一个csv文件,我会在MS excel中打开该文件进行查看,我很想看到格式2所示的4行4列的结果。为了更清楚,我去掉了问题中的第1列和第2列。