Python:将dict附加到现有的cs

2024-04-28 02:51:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将字典数据附加到现有的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

我也试过了

^{pr2}$

但是删除和写入新数据都不需要附加。在

我还尝试在数据帧中加载两个csv,然后将第二个csv附加到第一个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”对象没有属性“keys”

我想添加到一个现有的csv文件,数据从字典与相同的键。在


Tags: csv数据keydata错误keystitidict
2条回答

open(csv_filtepath, 'a')方法有效;事实上,它只对我有效,没有截断。在

请注意,您创建的是writer,而不是{};前者接受列表,而不是dict。在

但是如果你要附加到一个现有的文件中,你必须显式地遵循它的列顺序,这样DictWriter就不能工作了。您必须执行如下操作,假设它是要附加到的文件的列顺序。在

with open(csv_file, 'a') as f:
  writer = vcs.writer(f)  # Note: writes lists, not dicts.
  for data in rows_to_append:  # Maybe your df, or whatever iterable.
    writer.writerow([data['toto'], data['tata'], data['titi']])

知道列的顺序可能也很棘手。如果您不确定,您可以只读取第一个CSV文件的第一行(可能很大),如果该行包含列名。您可以使用普通的CSV阅读器:

^{pr2}$
df1 = pd.DataFrame({'toto': [1], 'tata': [2], 'titi': [3]})
df2 = pd.DataFrame({'toto': [2], 'tata': [1], 'titi': [5]})

DF = pd.concat([df1, df2], axis=0)

这就是你要找的吗

编辑:为您的例子节省内存的片段

^{pr2}$

相关问题 更多 >