如何使用python更新csv文件而不追加新行?

0 人关注

我有一个power shell脚本和python脚本,它将数据写进一个普通的CSV文件。如果我在python脚本中使用关键字'w+',它会删除旧的数据并替换为新的数据。如果我使用关键字'a+',它就会不断地追加不被接受的数据。现在我只想更新CSV文件中特定键的列中的值。

我需要帮助,以了解如何解决这个问题。

  Test.csv =>includes =>
  Param_Name,Param_Value
  p_resource_name,res123   #prints from powershell script
  p_tag_name,tag123        #prints from powershell script
  p_instance_count,0       #prints from Python script
  p_volume_count,0         #prints from Python script
  Powershell.ps1=>
   $file_path="C:\test.csv"
   $csv = Import-Csv -Path $file_path
   $result = Foreach ($row in $csv)
   if ($row.Param_Name -eq "p_instance_count") { $row.Param_Value = $instance}
   if ($row.Param_Name -eq "p_volume_count") { $row.Param_Value = $volume}
  Python.py =>
   f = csv.writer(codecs.open("C:/test.csv", "ab"), lineterminator="\n")
   instances = conn.instances.filter(Filters=[{'Name': 'instance-state-name', 
   'Values': ['running', 'stopped']}])
  for instance in instances:
      instance_count.append(instance)
      instanceCount = str(len(instance_count))
  f.writerow(('p_instance_count', len(instance_count)))

因此,这是我的代码,首先我运行Powershell,它应该更新csv,然后我运行一个python脚本,再次更新同一个CSV的计数。

谁能建议一个好的更新方法?

python
python-2.7
powershell
csv
Mia
Mia
发布于 2019-09-23
2 个回答
Dick Kniep
Dick Kniep
发布于 2019-09-23
已采纳
0 人赞同

这个问题在我看来不是很清楚。当你想更新一个CSV文件时,你必须读取它,在内存中修改它,并在整体上重写新创建的实例列表。

instances = conn.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running', 'stopped']}]) for instance in instances: instance_count.append(instance) instanceCount = str(len(instance_count))

BTW,请注意,对python2.7的支持在4个月内结束...你应该改用Python3

变量 instances 只包含你想要改变的行(据我所知)。

替换代码2】是一个新的列表,应该包含 所有 原有列表中的行数。

Serge Ballesta
Serge Ballesta
发布于 2019-09-23
0 人赞同

一个csv文件是一个 连续的 文件。正因为如此,你甚至不应该考虑在不重写整个文件的情况下改变一个字段的值。当然也有例外情况,但这太容易出错了,我不建议这样做。