将字典写入xlsx文件

时间:2019-12-06 17:50:48

标签: python

我有一本看起来像这样的字典:

{'4F703:00013:02038': {'100.000, Oryza rufipogon x Oryza sativa', '100.000, 
    Oryza rufipogon', '100.000, Oryza sativa', '100.000, 
    Oryza sativa Japonica Group', '100.000, Oryza sativa f. spontanea'}}

我想将此字典写入xlsx文件,所以我执行了以下代码:

workbook=xlsxwriter.Workbook('demo.xlsx')
worksheet=workbook.add_worksheet()
row=0
col=0
for key in new_dict.keys():
    row += 1
    worksheet.write(row,col,   key)
    for item in new_dict[key]:
        print(item,row,col+1)
        worksheet.write(row,col + 1,item)
        col += 1
    col = 0
workbook.close()

但是我得到以下输出:

enter image description here

我想这样:

enter image description here

我在做什么错?

4 个答案:

答案 0 :(得分:2)

使用pandas.ExcelWriter可以大大简化此任务:

import pandas as pd
data = {'4F703:00013:02038': {'100.000, Oryza sativa', '100.000, Oryza rufipogon x Oryza sativa', '100.000, Oryza rufipogon', '100.000, Oryza sativa f. spontanea', '100.000, Oryza sativa Japonica Group'}}
new_data = [[a, [i.split(', ') for i in b]] for a, b in data.items()]
with pd.ExcelWriter('spreadsheet.xlsx') as writer:
   df = pd.DataFrame([i for a, [c, *d] in new_data for i in [[a, *c], *[['', *k] for k in d]]])
   df.to_excel(writer, sheet_name='sheet1', startrow=0, index=False)
   writer.save()

enter image description here

答案 1 :(得分:1)

item是一个包含数字和以逗号分隔的文本的字符串。该字符串将添加到工作表的列中。

为了将数字和文本分开,需要另外一列。

您可以执行item.split(',')并将第一部分放在第二栏中,第二部分放在第三栏中。

num, text = item.split(',')
worksheet.write(row,col + 1, num)
worksheet.write(row,col + 2, text)

答案 2 :(得分:1)

import re

pattern = r'\b[A-Za-z ]*[A-Za-z]\b'

rows_string = 'Equity & 1,638 & \\$3,227,305 & \\$2,649,208 & \\$3,270,402 & \\$3,114,298 & \\$3,173,369 & \\$2,978,769 & \\$3,016,161 & \\$2,807,840\\\\\nFixed Income & 420 & \\$765,856 & \\$661,395 & \\$824,603 & \\$792,579 & \\$794,224 & \\$783,793 & \\$719,307 & \\$630,298\\\\\nCommodities & 119 & \\$72,911 & \\$66,302 & \\$81,649 & \\$81,633 & \\$79,296 & \\$76,450 & \\$64,136 & \\$63,667\\\\\nAsset Allocation & 63 & \\$10,190 & \\$9,275 & \\$10,684 & \\$10,089 & \\$10,371 & \\$9,829 & \\$9,619 & \\$8,880\\\\\nAlternatives & 55 & \\$5,601 & \\$6,023 & \\$6,715 & \\$6,279 & \\$6,365 & \\$6,645 & \\$6,757 & \\$6,243\\\\\nCurrency & 34 & \\$311 & \\$2,014 & \\$1,665 & \\$1,743 & \\$1,683 & \\$1,666 & \\$1,722 & \\$2,058\\\\\nTOTALS & 2,329 & \\$4,082,173 & \\$3,394,217 & \\$4,195,718 & \\$4,006,620 & \\$4,065,308 & \\$3,857,151 & \\$3,817,700 & \\$3,518,986\\\\'

rows = re.findall(pattern, rows_string)

print(rows)

rows_string2 = 'Starting Portfolio & sell & 21.39\\% & -0.91\\% & 1.52\\% & 9.29\\% & 9.72\\% & 14.89\\% & 38.21\\% & 55.4\\% &  & 90.86\\%\\\\'

rows2 = re.findall(pattern, rows_string2)

print(rows2)

我认为您正在考虑将'100.000,Oryza rufipogon x Oryza sativa'作为多个值,但将其作为单个值,并将其填充在单个列中。上述解决方案可能会清除一些问题。

答案 3 :(得分:0)

您的代码没有错。

请注意,“ 100.000,Oryza rufipogon x Oryza sativa”是一个值。 如果要在excel中作为单独的列。获取字符串并将其除以,然后将其写入工作表。