很抱歉,如果重复此问题,但我进行了搜索,找不到一个简单的例子。
我正在尝试将字典值写入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 |
| ZA | 27 |
| ZB | 28 |
| ZC | 29 |
| ZD | 30 |
|---------|---------|
但是我想拆分行并以以下格式编写:
|---------|---------|---------|---------|
| A | 1 | ZA | 27 |
| B | 2 | ZB | 28 |
| C | 3 | ZC | 29 |
| D | 4 | ZD | 30 |
|---------|---------|---------|---------|
答案 0 :(得分:1)
编辑
在进一步澄清之后,这是您正在寻找的解决方案:
import csv
w = csv.writer(open("../log.csv", "w"))
alphanum = {'A':1, 'B':2, 'C':3, 'D':4, 'ZA':27, 'ZB':28, 'ZC':29, 'ZD':30}
alphanum_size = len(alphanum)
sorted_alphanum = sorted(alphanum.items())
for i in range(int(alphanum_size / 2)):
w.writerow(sorted_alphanum[i] + sorted_alphanum[i + 4]) if i + 4 < alphanum_size else w.writerow(sorted_alphanum[i])
# Corner case - size is odd and len != 0, write last k: v pair
if alphanum_size % 2 and alphanum_size:
w.writerow(sorted_alphanum[-1])
如您所见,我们正在将字典的大小分配给变量alphanum_size
,以避免len()
循环中过多的for
函数调用,这会在一定程度上影响效率。 / p>
我们还在for循环中使用了ternary operator。等效于:
if i + 4 < alphanum_size:
w.writerow(sorted_alphanum[i] + sorted_alphanum[i + 4])
else:
w.writerow(sorted_alphanum[i]
最简单的方法是更改数据容器,并将其基本上变成list
个dict
中的一个。
w = open("../log.csv", "w")
alphanum = [{'col1': 'A', 'col2': 1, 'col3': 'ZA', 'col4': 27},
{'col1': 'B', 'col2': 2, 'col3': 'ZB', 'col4': 28},
...]
然后,您可以使用DictWriter
轻松地执行写操作。
header_columns = alphanum[0].keys()
writer = csv.DictWriter(w, header_columns)
writer.writeheader()
writer.writerows(alphanum)
这里可以做的另一项改进是使用上下文管理器而不是常规文件open()
。您可以阅读那些here。