在没有键的循环中使用 dict 值更新 csv
Update a csv with dict values in a loop without keys
我可以使用 csv.Dictwriter 从 dict 生成 csv,但无法弄清楚如何制作一个函数来将新的 dicts 值附加到 csv 文件并确保将值添加到正确的csv 的列以保留键和值之间的 link。
[添加以阐明为什么我在循环中需要它]在我编写的代码中,我需要将 headers 写入 csv,然后我有一个测量循环,在循环中我收到一个 dict所有的测量结果,并想将其写入 csv 文件——然后当循环的下一次迭代发生时,dict 将被重写为新值——我只是不知道如何编写一些代码来模拟没有我去的 dict 的 dict与.
代码
import csv
print('\n'*3)
adict = {"Gizmo" : 1, "Line" : 1, "Height" : 6.0, "Weight" : 9.7, "Width" : 90}
bdict = {"Gizmo" : 1, "Line" : 2, "Height" : 5.8, "Weight" : 9.9, "Width" : 89.2}
cdict = {"Gizmo" : 1, "Line" : 3, "Height" : 6.3, "Weight" : 11.0, "Width" : 91.9}
ddict = {"Gizmo" : 1, "Line" : 4, "Height" : 6.2, "Weight" : 7.7, "Width" : 89.4}
my_dict = {"a": adict, "b": bdict, "c" : cdict, "d" : ddict}
def make_csv_with_headers(my_csv_file):
csv_file = my_csv_file
try:
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = my_dict["a"].keys())
writer.writeheader()
#for data in adict:
#writer.writerow(data)
except IOError:
print("I/O error")
def update_csv(my_csv_file):
csv_file = my_csv_file
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile)
for k, v in adict.items():
writer.writerow(v)
make_csv_with_headers("a_data.csv")
for k,v in my_dict.items():
print(v,'\n')
update_csv("a_data.csv")
尝试过但失败了
def update_csv_2():
myfile = open('aa.csv', 'w')
with open(myfile, 'w') as f:
fnames = my_dict["a"].keys()
writer = csv.DictWriter(f, fieldnames=fnames)
writer.writeheader()
writer.writerow(my_dict["a"].values())
writer.writerow(my_dict["b"].values())
writer.writerow(my_dict["c"].values())
writer.writerow(my_dict["d"].values())
期望的输出#csv文件
Gizmo,Line,Height,Weight,Width
1,1,6.0,9.7,90
1,2,5.8,9.9,89.2
1,3,6.3,11.0,91.9
1,4,6,2,7.7,89.4
当你必须在循环中使用它时的代码
import csv
from csv import writer
from csv import DictWriter
adict = {"Gizmo" : 1, "Line" : 1, "Height" : 6.0, "Weight" : 9.7, "Width" : 90}
bdict = {"Gizmo" : 1, "Line" : 2, "Height" : 5.8, "Weight" : 9.9, "Width" : 89.2}
cdict = {"Gizmo" : 1, "Line" : 3, "Height" : 6.3, "Weight" : 11.0, "Width" : 91.9}
ddict = {"Gizmo" : 1, "Line" : 4, "Height" : 6.2, "Weight" : 7.7, "Width" : 89.4}
my_dict = {"a": adict, "b": bdict, "c" : cdict, "d" : ddict}
my_dict2 = [adict,bdict,cdict,ddict]
def make_csv_with_header(filename):
headers = ["Gizmo", "Line", "Height", "Weight", "Width"]
with open(filename, 'w') as f:
writer_object = writer(f)
writer_object.writerow(headers)
f.close()
def append_csv(filename, mydict):
field_names = ["Gizmo", "Line", "Height", "Weight", "Width"]
# Open your CSV file in append mode, Create a file object for this file
with open('a3.csv', 'a') as f_object:
# Pass the file object and a list of column names to DictWriter() You will get a object of DictWriter
dictwriter_object = DictWriter(f_object, fieldnames=field_names)
#Pass the dictionary as an argument to the Writerow()
dictwriter_object.writerow(mydict)
#Close the file object
f_object.close()
# make initial csv with headers
make_csv_with_header("a3.csv")
# appending dict to csv
for dicty in my_dict2:
append_csv("a3.csv", dicty)
您不想重复打开和关闭 .csv
文件。特别是如果你以 w
模式打开,旧的内容就会消失。只需打开一次:
import csv
print('\n'*3)
adict = {"Gizmo" : 1, "Line" : 1, "Height" : 6.0, "Weight" : 9.7, "Width" : 90}
bdict = {"Gizmo" : 1, "Line" : 2, "Height" : 5.8, "Weight" : 9.9, "Width" : 89.2}
cdict = {"Gizmo" : 1, "Line" : 3, "Height" : 6.3, "Weight" : 11.0, "Width" : 91.9}
ddict = {"Gizmo" : 1, "Line" : 4, "Height" : 6.2, "Weight" : 7.7, "Width" : 89.4}
my_dict = {"a": adict, "b": bdict, "c" : cdict, "d" : ddict}
with open("a_data.csv", 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = my_dict["a"].keys())
for k, v in my_dict.items():
print(v, '\n')
writer.writerow(v)
如果您没有立即写入所有值,请使用相同的模式:
with open("a_data.csv", 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = my_dict["a"].keys())
while True:
measurements = do_measurement()
writer.writerow(measurements)
不需要my_dict
。
我可以使用 csv.Dictwriter 从 dict 生成 csv,但无法弄清楚如何制作一个函数来将新的 dicts 值附加到 csv 文件并确保将值添加到正确的csv 的列以保留键和值之间的 link。
[添加以阐明为什么我在循环中需要它]在我编写的代码中,我需要将 headers 写入 csv,然后我有一个测量循环,在循环中我收到一个 dict所有的测量结果,并想将其写入 csv 文件——然后当循环的下一次迭代发生时,dict 将被重写为新值——我只是不知道如何编写一些代码来模拟没有我去的 dict 的 dict与.
代码
import csv
print('\n'*3)
adict = {"Gizmo" : 1, "Line" : 1, "Height" : 6.0, "Weight" : 9.7, "Width" : 90}
bdict = {"Gizmo" : 1, "Line" : 2, "Height" : 5.8, "Weight" : 9.9, "Width" : 89.2}
cdict = {"Gizmo" : 1, "Line" : 3, "Height" : 6.3, "Weight" : 11.0, "Width" : 91.9}
ddict = {"Gizmo" : 1, "Line" : 4, "Height" : 6.2, "Weight" : 7.7, "Width" : 89.4}
my_dict = {"a": adict, "b": bdict, "c" : cdict, "d" : ddict}
def make_csv_with_headers(my_csv_file):
csv_file = my_csv_file
try:
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = my_dict["a"].keys())
writer.writeheader()
#for data in adict:
#writer.writerow(data)
except IOError:
print("I/O error")
def update_csv(my_csv_file):
csv_file = my_csv_file
with open(csv_file, 'w') as csvfile:
writer = csv.DictWriter(csvfile)
for k, v in adict.items():
writer.writerow(v)
make_csv_with_headers("a_data.csv")
for k,v in my_dict.items():
print(v,'\n')
update_csv("a_data.csv")
尝试过但失败了
def update_csv_2():
myfile = open('aa.csv', 'w')
with open(myfile, 'w') as f:
fnames = my_dict["a"].keys()
writer = csv.DictWriter(f, fieldnames=fnames)
writer.writeheader()
writer.writerow(my_dict["a"].values())
writer.writerow(my_dict["b"].values())
writer.writerow(my_dict["c"].values())
writer.writerow(my_dict["d"].values())
期望的输出#csv文件
Gizmo,Line,Height,Weight,Width
1,1,6.0,9.7,90
1,2,5.8,9.9,89.2
1,3,6.3,11.0,91.9
1,4,6,2,7.7,89.4
当你必须在循环中使用它时的代码
import csv
from csv import writer
from csv import DictWriter
adict = {"Gizmo" : 1, "Line" : 1, "Height" : 6.0, "Weight" : 9.7, "Width" : 90}
bdict = {"Gizmo" : 1, "Line" : 2, "Height" : 5.8, "Weight" : 9.9, "Width" : 89.2}
cdict = {"Gizmo" : 1, "Line" : 3, "Height" : 6.3, "Weight" : 11.0, "Width" : 91.9}
ddict = {"Gizmo" : 1, "Line" : 4, "Height" : 6.2, "Weight" : 7.7, "Width" : 89.4}
my_dict = {"a": adict, "b": bdict, "c" : cdict, "d" : ddict}
my_dict2 = [adict,bdict,cdict,ddict]
def make_csv_with_header(filename):
headers = ["Gizmo", "Line", "Height", "Weight", "Width"]
with open(filename, 'w') as f:
writer_object = writer(f)
writer_object.writerow(headers)
f.close()
def append_csv(filename, mydict):
field_names = ["Gizmo", "Line", "Height", "Weight", "Width"]
# Open your CSV file in append mode, Create a file object for this file
with open('a3.csv', 'a') as f_object:
# Pass the file object and a list of column names to DictWriter() You will get a object of DictWriter
dictwriter_object = DictWriter(f_object, fieldnames=field_names)
#Pass the dictionary as an argument to the Writerow()
dictwriter_object.writerow(mydict)
#Close the file object
f_object.close()
# make initial csv with headers
make_csv_with_header("a3.csv")
# appending dict to csv
for dicty in my_dict2:
append_csv("a3.csv", dicty)
您不想重复打开和关闭 .csv
文件。特别是如果你以 w
模式打开,旧的内容就会消失。只需打开一次:
import csv
print('\n'*3)
adict = {"Gizmo" : 1, "Line" : 1, "Height" : 6.0, "Weight" : 9.7, "Width" : 90}
bdict = {"Gizmo" : 1, "Line" : 2, "Height" : 5.8, "Weight" : 9.9, "Width" : 89.2}
cdict = {"Gizmo" : 1, "Line" : 3, "Height" : 6.3, "Weight" : 11.0, "Width" : 91.9}
ddict = {"Gizmo" : 1, "Line" : 4, "Height" : 6.2, "Weight" : 7.7, "Width" : 89.4}
my_dict = {"a": adict, "b": bdict, "c" : cdict, "d" : ddict}
with open("a_data.csv", 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = my_dict["a"].keys())
for k, v in my_dict.items():
print(v, '\n')
writer.writerow(v)
如果您没有立即写入所有值,请使用相同的模式:
with open("a_data.csv", 'w') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames = my_dict["a"].keys())
while True:
measurements = do_measurement()
writer.writerow(measurements)
不需要my_dict
。