Python 使用dictwriter将字典嵌套到具有非统一(格式错误?)数据的CSV
由于数据的输入和以后的使用方式,我目前正在将数据构建到一个嵌套字典中,但我希望在这个中间步骤中编写一个可读的“摘要”csv,以便于跟踪。据我所知,字典是无顺序的,但当我使用这些dictWriter函数时,顺序似乎很重要 我无法将我的确切代码复制到这台计算机上,但这就是我的数据结构Python 使用dictwriter将字典嵌套到具有非统一(格式错误?)数据的CSV,python,csv,dictionary,nested,Python,Csv,Dictionary,Nested,由于数据的输入和以后的使用方式,我目前正在将数据构建到一个嵌套字典中,但我希望在这个中间步骤中编写一个可读的“摘要”csv,以便于跟踪。据我所知,字典是无顺序的,但当我使用这些dictWriter函数时,顺序似乎很重要 我无法将我的确切代码复制到这台计算机上,但这就是我的数据结构 myItems = { "Item1": { "Col1":"c1.1", "Col2":"c2.1", "C
myItems =
{
"Item1":
{
"Col1":"c1.1",
"Col2":"c2.1",
"Col3":"c3.1",
},
"Item2":
{
"Col1":"c1.2",
"Col3":"c3.2",
},
"Item3":
{
"Col1":"c1.3",
"Col4":"c4.3",
"Col5":"c5.3",
},
"Item4":
{
"Col3":"c3.4",
"Col2":"c2.4",
"Col1":"c1.4",
}
}
我希望我的表格如下所示(没有额外的间距,这样做是为了可读性)
我可以编写一个函数,对字典进行索引,组合已知的标题,将其转换为列表,在没有表示键的地方输入空白条目,等等,但是Dictwriter似乎有某种形式的适应能力,因为它是为无序书写而设计的
另外,如果存在这种方法,我可以在程序的其他地方使用它来打印可能不共享相同表的SQL数据库条目的摘要
我对Python还是相当陌生的,所以我听说这些嵌套字典有多强大,所以如果我对嵌套字典的功能卖得太多,如果这不可能的话,我会责怪他们的啦啦队=P
DictWriter的默认设置是对缺少的键使用空格。如果您在项目上迭代并创建一个字典,该字典是添加了
Item
键的原始字典的副本,您将得到想要的结果<还必须指定代码>字段名,以提供列写入顺序
import csv
myItems = {'Item1': {'Col1':'c1.1',
'Col2':'c2.1',
'Col3':'c3.1'},
'Item2': {'Col1':'c1.2',
'Col3':'c3.2'},
'Item3': {'Col1':'c1.3',
'Col4':'c4.3',
'Col5':'c5.3'},
'Item4': {'Col3':'c3.4',
'Col2':'c2.4',
'Col1':'c1.4'}}
with open('out.csv','w',newline='',encoding='utf-8-sig') as f:
w = csv.DictWriter(f,fieldnames='Item Col1 Col2 Col3 Col4 Col5'.split())
w.writeheader()
for k,v in myItems.items():
D = v.copy() # So myItems is not modified.
D['Item'] = k
w.writerow(D)
输出:
Item,Col1,Col2,Col3,Col4,Col5
Item1,c1.1,c2.1,c3.1,,
Item2,c1.2,,c3.2,,
Item3,c1.3,,,c4.3,c5.3
Item4,c1.4,c2.4,c3.4,,
请注意,如果使用Excel读取文件,则最好使用utf-8-sig
编码。它正确地支持Unicode,但在本例中仅使用了ASCII兼容字符:
DictWriter
已经知道如何处理丢失的钥匙。如果缺少键,restval
参数(默认为空字符串,'
)用作写入CSV列的默认值。请注意,DictWriter
采用一系列字段名,这是一种有序的数据结构,然后用于确定写入列的顺序。然后,您可以一次给DictWriter
一行(一个有序的操作,一个接一个的调用),或者给一个iterable行(使用.writerows()
),这也是一个有序的操作。因此,DictWriter
通过让程序员提供订单解决了这个问题。
Item,Col1,Col2,Col3,Col4,Col5
Item1,c1.1,c2.1,c3.1,,
Item2,c1.2,,c3.2,,
Item3,c1.3,,,c4.3,c5.3
Item4,c1.4,c2.4,c3.4,,