如何将数据添加到 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')
我已经有一个正在访问的 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')