我有一个字典(my_dict),其中包含多个键/值对字典(按编号索引),我正在尝试在每个字典中创建值的.csv文件,以便每个字典的值都在一个.csv文件的一行。
以下代码成功打印第一个字典,其中键作为标题,以及下面行中的值。然后,我实现了一个计数器(因为字典被字典编号索引),并且这成功地将附加的字典值写入文件的下一行。但是,我正在努力产生一个for循环,它将继续向该数字添加“1”,直到最后一个编号的字典(这取决于文件,但它们可以包含数百个)。有没有比复制和粘贴更有效的方法呢?我知道到目前为止一定有但是没有成功。
感谢!!!!
import csv
number = 1
with open('mycsvfile.csv', 'wb') as f: # Just use 'w' mode in 3.x
rec = my_dict[str(number)]
w = csv.DictWriter(f, rec.keys())
w.writeheader()
w.writerow(rec)
number= number + 1
rec = my_dict[str(number)]
w = csv.DictWriter(f, rec.keys())
w.writerow(rec)
number= number + 1
rec = my_dict[str(number)]
w = csv.DictWriter(f, rec.keys())
w.writerow(rec)
number= number + 1
(等到数字是最高的字典数...需要一遍又一遍地重新粘贴这部分)
答案 0 :(得分:1)
嗯,最简单的循环就是缩进整个重复的东西并在其周围加while True:
:
number = 1
with open('mycsvfile.csv', 'wb') as f: # Just use 'w' mode in 3.x
while True:
rec = my_dict[str(number)]
w = csv.DictWriter(f, rec.keys())
if number == 1: w.writeheader()
w.writerow(rec)
number= number + 1
这几乎可行 - 除了你永远不会退出循环。
那么,你知道什么时候做吗?你知道提前的最高人数吗?如果是这样的话:
with open('mycsvfile.csv', 'wb') as f: # Just use 'w' mode in 3.x
for number in range(1, highest_number + 1):
rec = my_dict[str(number)]
w = csv.DictWriter(f, rec.keys())
if number == 1: w.writeheader()
w.writerow(rec)
或者你继续前进,直到在dict中找不到其中一个数字?然后:
number = 1
with open('mycsvfile.csv', 'wb') as f: # Just use 'w' mode in 3.x
while True:
try:
rec = my_dict[str(number)]
except KeyError:
break
w = csv.DictWriter(f, rec.keys())
if number == 1: w.writeheader()
w.writerow(rec)
number += 1
或者,因为你的键只是整数的字符串表示,所以只需将dict项排序为整数:
with open('mycsvfile.csv', 'wb') as f: # Just use 'w' mode in 3.x
for key, rec in sorted(my_dict.items(), key=int):
w = csv.DictWriter(f, rec.keys())
if key == 1: w.writeheader()
w.writerow(rec)
无论规则是什么,它应该很容易写,但不知道规则,这是不可能的......
值得注意的是,使用DictWriter
的全部意义在于您的所有词组都具有相同的键,因此您使用单个DictWriter
而不是为每行创建一个新词......
答案 1 :(得分:0)
import csv
NUMBER_MAX = 100 #guessing
f = open('mycsvfile.csv', 'wb')
for number in range(1,NUMBER_MAX+1):
rec = my_dict[str(number)]
w = csv.DictWriter(f, rec.keys())
if number == 1:
w.writeheader()
w.writerow(rec)
当然,如果你可以在for循环之外编写headder,那就更好了。但是我会把它留给你。
注意我没有尝试运行此代码(可能存在拼写错误/语法错误)
答案 2 :(得分:0)
这是使用Pandas的优雅解决方案:
import pandas as pd
pd.DataFrame(my_dict).to_csv('mycsvfile.csv')
Pandas可以将dicts的dict转换为DataFrame。然后to_csv
方法将其写入csv。您可能必须使用参数来准确获取所需内容,例如是否要写入键还是只读取值。
使用默认参数,第一行包含外键,内键将构成第一列。