我有一个字典,它以单元格坐标为键,以所需的单元格内容为值,例如:
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]) + ',')
这会按顺序写出值,这意味着它们不会在正确的单元格中,我需要它们在由它们的键指定的单元格中。
最佳答案
此代码使用列表理解来构建每一行。
首先,我们使用 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])
即使一些值是字符串而一些是数字,这也能应付。
关于python - 写入 csv 时使用字典键作为坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31920681/