将字典键用作在写入CSV时的坐标

4

我有一个字典,其中单元格坐标为键,所需单元格内容为值,例如:

dict1 = {'AN32': '2', 'AZ17': '47', ect...}

单元格范围是D4: AZ52

我想把它写进一个csv文件里。

在设计时遇到的问题是,字典不一定按字母或数字排序,如上面的示例所示。

我知道如何使用代码将其写入.csv文件中。

with open('example.csv', 'w') as f:

    for i in dict1:

        f.write(str(dict1[i]) + ',')

这将按顺序写出值,这意味着它们不会在正确的单元格中,我需要它们在由其键指定的单元格中。

可能是重复的问题,参考链接:https://dev59.com/DW7Xa4cB1Zd3GeqPnThg?rq=1 - stark
你在 CSV 文件中想要的输出结果应该是什么样子的? - Joe T. Boka
我假设您希望CSV中的数据有48列和48行。是这样吗? - PM 2Ring
正确,48列,48行。 - Joe Smart
@pnuts:这与Excel如何将行和列转换为单元格标识符有关。 - martineau
显示剩余4条评论
1个回答

1

这段代码使用列表推导式构建每一行。

首先,我们使用string模块中的uppercase字符串创建列标签列表,并使用简单的列表推导式构建所有列标签的列表。

然后,我们使用稍微复杂的列表推导式通过将每个列标签与当前行号(转换为字符串)组合成一个键。该键被传递给dict1.get()方法以获取与该键相关联的值。我们使用空字符串''作为.get()的第二个参数,以便如果字典中不存在键,则获得空字符串。

然后,我们使用.join()方法将所有这些字符串连接起来,用逗号分隔。

from string import uppercase

#Make a list of the column letters
cols = list(uppercase[3:]) + ['A' + c for c in uppercase]
#print(cols)

with open('example.csv', 'w') as f:
    for r in range(4, 53):
        row = ','.join([dict1.get(c + str(r), '') for c in cols])
        f.write(row + '\n')

如果 dict1 中的值实际上是 int 而不是字符串,则在尝试连接它们之前需要将它们转换为字符串。将列表推导式更改为:
row = ','.join([str(dict1.get(c + str(r), '')) for c in cols])

那可以应对一些值是字符串,一些值是数字的情况。

我已经阅读并理解了这个解决方案,它非常优雅。然而,它还是会抛出一个错误:TypeError: sequence item 12: expected string, into found" - Joe Smart
@JoeSmart:我怀疑错误信息实际上是说“期望字符串,但发现整数”。dict1中的所有值都是字符串吗?从您提供的示例数据中,我假设它们是。顺便说一句,我刚刚注意到您的示例数据中有一个键为“'Z2'”,但您也说单元格范围是“D4:AZ52”。 - PM 2Ring
我的示例数据不够清晰,抱歉。我给出的范围是正确的。我只是随机输入了一些坐标作为结构示例。我会再次确认它们都是字符串。 - Joe Smart
@JoeSmart:好的。你应该修复你问题中的dict1行。我已经更新了我的答案来处理整数值。 - PM 2Ring

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接