【发布时间】:2019-07-25 16:42:53
【问题描述】:
我想将字典数据附加到现有的 csv 中,而无需再次写入标题。
我尝试了这个问题的所有东西:append new row to old csv file python
我尝试了 pandas 和 csv 解决方案。
try:
if os.path.isfile(csv_filepath) is False:
df = pandas.DataFrame.from_dict(dict_data, orient="index")
df.to_csv(csv_filepath)
else:
list_values = []
list_keys = []
for key, value in dict_data.items():
list_values.append(value)
list_keys.append(key)
with open(csv_filepath, 'a', newline='') as fd:
writer = csv.DictWriter(fd, fieldnames=list_keys)
writer.writerow(dict_data)
except Exception as e:
raise e
我也试过
with open(csv_filtepath, 'a') as f:
writer = csv.writer(f)
writer.writerow(dict_data)
但既擦除又写入新数据而不追加。
我还尝试在数据帧中加载两个 csv,然后将第二个附加到第一个,但它添加了两次标题
编辑:
例如,我首先创建一个csv:{'toto': 1, 'tata': 2, 'titi': 3}
然后我想追加创建的 csv {'toto': 2, 'tata': 1, 'titi': 5}
这个操作之后,我想在toto列中有1和2,在tata列中有2和1,在titi列中有3和5。
编辑 2
我试过这个:
df1 = pd.read_csv(csv_filepath)
df2 = pd.DataFrame(dict_data)
df3 = pd.concat([df1, df2], axis=0)
df3.to_csv(csv_filepath)
但我有一条错误消息:'错误标记数据。 C 错误:预计第 20 行中有 2 个字段,看到 9'
编辑 3
list_keys = []
for key, value in dict_data.items():
list_keys.append(key)
with open(csv_filepath, 'a', newline='') as fd:
writer = csv.DictWriter(fd, fieldnames=list_keys)
writer.writerow([data['toto'], data['tata'], data['titi']])
我有这个错误信息:'list' object has no attribute 'keys'
我想将具有相同键的字典中的数据添加到现有的 csv 文件中。
【问题讨论】:
-
提供要使用的数据......以及你得到的输出......以及你想要的输出
-
感谢@geekzeus 的回答,我刚刚编辑了我的问题
-
open(csv_filtepath, 'a')方法有效;事实上,它只是为我工作而没有截断。请注意,您创建的是writer,而不是DictWriter;前者接受列表,而不是字典。但是,如果要附加到现有文件,则无论如何都必须明确遵循其列顺序,因此DictWriter将不起作用。您必须执行类似.writerow([data['toto'], data['tata'], data['titi']])的操作,假设它是您要附加到的文件的列顺序。 -
谢谢@9000,你能回答一下吗?我现在将根据您的提议尝试编辑我的问题