如何将数据添加到 CSV 文件的现有行?

How to add data to existing rows of a CSV file?

我已经有一个正在访问的 CSV 文件,我想将数据附加到第一行,但它在文件末尾写入数据。

我得到了什么:

但我希望数据像这样附加:

到目前为止我完成的代码:

import CSV

with open('explanation.csv' , 'a', newline="") as file:
    myFile = csv.writer(file)
    myFile.writerow(["1"])

您可以读入整个文件,将行追加到内存中,然后写入整个文件:

 def append(fname, data):
        with open(fname) as f:
            reader = csv.reader(f)
            data = list(reader) + list(data)
        with open(fname, 'w') as f:
            writer = csv.writer(f)
            writer.writerows(data)

您实际上想要做的是用新值替换 现有 CSV 文件中的数据,但是为了更新 CSV 文件,您必须重写整个文件。

一种方法是将整个文件读入内存,更新数据,然后用它覆盖现有文件。或者,您可以处理文件 row-at-a-time 并将结果存储在临时文件中,然后在完成所有更新后用临时文件替换原始文件。

执行后者的代码如下所示:

import csv
import os
from pathlib import Path
from tempfile import NamedTemporaryFile


filepath = Path('explanation.csv')  # CSV file to update.

with open(filepath, 'r', newline='') as csv_file, \
     NamedTemporaryFile('w', newline='', dir=filepath.parent, delete=False) as tmp_file:

    reader = csv.reader(csv_file)
    writer = csv.writer(tmp_file)

    # Replace value in the first column of the first 5 rows.
    for data_value in range(1, 6):
        row = next(reader)
        row[0] = data_value
        writer.writerow(row)

    writer.writerows(reader)  # Copy remaining rows of original file.

# Replace original file with updated version.
os.replace(tmp_file.name, filepath)

print('CSV file updated')