我有一段代码生成了一个有缺陷的 CSV 文件,但我无法修复该文件。不过,我可以在事后解决这个问题。这是 CSV 文件:
column_a, column_b, column_c, column_d
1, 2_a, 3_b, 4_c, 5_d
1, 2_a, 3_b, 4_c, 5_d
1, 2_a, 3_b, 4_c, 5_d
1, 2_a, 3_b, 4_c, 5_d
我想跳过第一行并删除 csv 文件中的所有“1”。我有以下代码来尝试解决此问题,但由于某种原因我无法保存此文件。我想编辑该文件,而不是创建一个新文件并输出结果。这是我正在使用的代码:
import csv
file = 'file.csv'
csv_file = open(file)
csv_reader = csv.reader(csv_file)
next(csv_reader) # Skip first row
for row in csv_reader:
del row[0]
csv_reader.close()
看起来很简单,但我无法在不输出到单独文件的情况下保存这些更改。
最佳答案
更新文件将涉及重写整个内容。下面的代码显示了实现此目的的一种方法,该方法涉及首先将所有更改写入一个单独的临时文件,然后在将所有更改写入临时文件后用它替换原始文件。
您只能通过将整个文件读入内存,进行更改,然后用它们覆盖原始文件来避免写入单独的文件。
为了避免从标题行中删除该列,只需在一开始就单独处理它。下面的代码说明了如何执行所有操作:
import csv
import os
from pathlib import Path
from tempfile import NamedTemporaryFile
filepath = Path('file.csv')
with open(filepath, 'r', newline='') as csv_file, \
NamedTemporaryFile('w', newline='', dir=filepath.parent,
delete=False) as tmp_file:
csv_reader = csv.reader(csv_file)
csv_writer = csv.writer(tmp_file)
# First copy the header.
header = next(csv_reader)
csv_writer.writerow(header)
# Copy rows of data leaving out first column.
for row in csv_reader:
csv_writer.writerow(row[1:])
# Replace original file with updated version.
os.replace(tmp_file.name, filepath)
print('fini')
关于python - 如何删除 csv 文件中的一列值但不删除第一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68991012/