python - 如何删除 csv 文件中的一列值但不删除第一项?

标签 python csv

我有一段代码生成了一个有缺陷的 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/

相关文章:

python - 在大型数据集上扩展多索引切片器时出现长度不匹配错误

python - 访问嵌套字典 panda 中的单元格的最佳方式是什么?

python - 从 Pandas DataFrame 列中删除特定符号(unicode)

python - MaxProductOfThree 如何提高性能

java - Gson 和 CSV 冲突?

c# - 在 C# winforms 中读取 csv 文件时出现数据错误

python - 使用 Flask-SQLAlchemy 批量插入

python - 在表格报告实验室中包装文本?

sqlite - 如何将csv文件导入sqlite,除了csv的第一行?

csv - 如何处理自动重复用户删除