gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 07:11:18 26 4
gpt4 key购买 nike

很抱歉,如果这个问题重复出现,但我搜索后找不到一个简单的例子。

我正在尝试将字典值写入 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 |
|---------|---------|---------|---------|

最佳答案

编辑

经过额外说明,以下是您正在寻找的解决方案:

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,以避免 for 中过多的 len() 函数调用code> 循环,这会在一定程度上影响效率。

我们还使用了 ternary operator在 for 循环中。它相当于:

if i + 4 < alphanum_size:
w.writerow(sorted_alphanum[i] + sorted_alphanum[i + 4])
else:
w.writerow(sorted_alphanum[i]
<小时/>

最简单的方法是更改​​数据容器,基本上将其变成 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 .

关于python - CSV 写入 - 将行拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208297/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com