Python 从多个词典写入单个CSV文件
背景 我有多本不同长度的字典。我需要将字典的值写入单个CSV文件。我想我可以一个接一个地遍历每个字典,然后将数据写入CSV。我遇到了一个小的格式问题 问题/解决方案 我意识到在我循环第一个字典之后,第二次写入的数据被写入第一个字典结束的行,如第一个图像所示Python 从多个词典写入单个CSV文件,python,csv,dictionary,Python,Csv,Dictionary,背景 我有多本不同长度的字典。我需要将字典的值写入单个CSV文件。我想我可以一个接一个地遍历每个字典,然后将数据写入CSV。我遇到了一个小的格式问题 问题/解决方案 我意识到在我循环第一个字典之后,第二次写入的数据被写入第一个字典结束的行,如第一个图像所示 import csv e = {'Jay':10,'Ray':40} c = {'Google':5000} def writeData(): with open('employee_file20.
import csv
e = {'Jay':10,'Ray':40}
c = {'Google':5000}
def writeData():
with open('employee_file20.csv', mode='w') as csv_file:
fieldnames = ['emp_name','age','company_name','size']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for name in e:
writer.writerow({'emp_name':name,'age':e.get(name)})
for company in c:
writer.writerow({'company_name':company,'size':c.get(company)})
writeData()
我的代码
import csv
e = {'Jay':10,'Ray':40}
c = {'Google':5000}
def writeData():
with open('employee_file20.csv', mode='w') as csv_file:
fieldnames = ['emp_name','age','company_name','size']
writer = csv.DictWriter(csv_file, fieldnames=fieldnames)
writer.writeheader()
for name in e:
writer.writerow({'emp_name':name,'age':e.get(name)})
for company in c:
writer.writerow({'company_name':company,'size':c.get(company)})
writeData()
PS:我会有两个以上的字典,所以我正在寻找一种通用的方式,在这里我可以打印所有字典标题下的行中的数据。我对所有的解决方案和建议都持开放态度。如果所有字典的大小相同,您可以使用它们并行迭代。如果它们的大小不相等,并且您希望迭代填充到最长的dict,那么您可以使用 例如:
import csv
from itertools import zip_longest
e = {'Jay':10,'Ray':40}
c = {'Google':5000}
def writeData():
with open('employee_file20.csv', mode='w') as csv_file:
fieldnames = ['emp_name','age','company_name','size']
writer = csv.writer(csv_file)
writer.writerow(fieldnames)
for employee, company in zip_longest(e.items(), c.items()):
row = list(employee)
row += list(company) if company is not None else ['', ''] # Write empty fields if no company
writer.writerow(row)
writeData()
如果DICT大小相同,则更简单:
import csv
e = {'Jay':10,'Ray':40}
c = {'Google':5000, 'Yahoo': 3000}
def writeData():
with open('employee_file20.csv', mode='w') as csv_file:
fieldnames = ['emp_name', 'age', 'company_name', 'size']
writer = csv.writer(csv_file)
writer.writerow(fieldnames)
for employee, company in zip(e.items(), c.items()):
writer.writerow(employee + company)
writeData()
还有一点需要注意的是:如果你使用Python3,字典是有序的。Python2的情况并非如此。因此,如果您使用Python2,您应该使用而不是标准字典。可能有一个更具python风格的解决方案,但我会这样做: 我以前没有使用过你的.csv编写器,所以我只做了自己的逗号分隔输出
e = {'Jay':10,'Ray':40}
c = {'Google':5000}
dict_list = [e,c] # add more dicts here.
max_dict_size = max(len(d) for d in dict_list)
output = ""
# Add header information here.
for i in range(max_dict_size):
for j in range(len(dict_list)):
key, value = dict_list[j].popitem() if len(dict_list[j]) else ("","")
output += f"{key},{value},"
output += "\n"
# Now output should contain the full text of the .csv file
# Do file manipulation here.
# You could also do it after each row,
# Where I currently have the output += "\n"
编辑:再多想一想,我发现一些东西可能会使这一点更加完美。您可以首先在每个字典上使用.key()函数将字典映射到一个键列表中,并将这些键附加到一个空列表中
这样做的好处是,您可以“前进”,而不是从后面弹出字典项。它也不会破坏字典。我发布了一个后续问题,不确定你是否知道它的解决方案。