使用Python编辑CSV行

时间:2019-02-02 23:17:50

标签: python python-3.x csv

我正在尝试在csv文件中编辑一行。我有一个看起来像下面的CSV文件:

类型|食物类型|进料时间|洗涤时间

LION | MEAT | 4H | 1D

FOX | MEAT | 5H | 3D

HEN | SEED | 6H | 6D

鱼|植物| 7H | 99D

我想根据其TYPE编辑该行。如果用户要编辑FOX行,则只需在出现提示时键入FOX。我面临的问题是由于某种原因我无法编辑文件。

下面是我的代码,我打开现有的数据库,找到有问题的行,进行更改,然后将其与其他行一起写入临时文件,以覆盖原始文件。

def edit_animal_entry(type):
with open(animal_csv, 'r') as file_read:
    reader = csv.reader(file_read, delimiter="|")

with open(temp, 'w') as file_write:
    writer = csv.writer(file_write)
    for row in reader:
        print(f"{' | '.join(row)}")
        if row[0] == type:
            animal_type, animal_food, animal_feed, animal_wash = animal_inputs()
            writer.writerow([animal_type, animal_food, (animal_feed+"H"), (animal_wash+"D")])
        else:
            writer.writerow(row)

shutil.move(temp, animal_csv)

1 个答案:

答案 0 :(得分:2)

您已经通过在读取文件之前停止with块来“关闭”读取的文件。因此,您不会遍历输入文件。一种解决方案是使用以下语句在同一输入框中打开输入和输出文件:

def edit_animal_entry(type):
  with open(animal_csv, 'r') as file_read, open(temp, 'w') as file_write:
      reader = csv.reader(file_read, delimiter="|")
      writer = csv.writer(file_write)
      for row in reader:
          print(f"{' | '.join(row)}")
          if row[0] == type:
              animal_type, animal_food, animal_feed, animal_wash = animal_inputs()
              writer.writerow([animal_type, animal_food, (animal_feed+"H"), (animal_wash+"D")])
          else:
              writer.writerow(row)

  shutil.move(temp, animal_csv)