删除 csv 中使用过的行并移动到其他 csv 文件

问题描述 投票:0回答:1

我目前正在跳过使用过的数据线,但我实际上想将使用过的数据线移动到新的 csv 文件,以便我在使用过的数据和未使用过的数据之间有一个清晰的分隔线。

我目前正在使用:

data = []
with open(path_to_csv_file) as f:
    reader = csv.reader(f, delimiter=',')
    for line in reader:
        data.append(line)

print(data)

我在寻找什么:

  1. 读取数据
  2. 打印数据
  3. 将数据移动到新的“已用”csv 文件
  4. 删除使用过的数据线
  5. 重复
python csv writer
1个回答
0
投票

您可以通过读取原始数据然后不写入新的 CSV 来有效地从 CSV 中删除行。然后,用新文件替换原始文件。

如果我们从这个原始的.csv开始:

| Name  | Department   |
|-------|--------------|
| Alice | Finance      |
| Bobby | Marketing    |
| Chuck | Marketing    |
| Daryl | Mailing Svcs |

我们可以有效地将营销的任何行移动到新的营销 CSV,并保留其他行,方法是:

  1. 同时打开output-marketing.csv和output-new.csv进行写入,并为每个文件创建csv.writers
  2. 阅读原文
    1. 复制标题(如果有的话)
    2. 对于每行(数据):
      1. 如果是营销,则写入output-marketing.csv
      2. 否则,写入output-new.csv:
import csv

f_mkt = open("output-marketing.csv", "w", newline="")
writer_mkt = csv.writer(f_mkt)

f_new = open("output-new.csv", "w", newline="")
writer_new = csv.writer(f_new)


f_in = open("original.csv", newline="")
reader = csv.reader(f_in)

header = next(reader)
writer_mkt.writerow(header)
writer_new.writerow(header)

for row in reader:
    if row[1] == "Marketing":
        writer_mkt.writerow(row)
    else:
        writer_new.writerow(row)

这给了我们输出营销.csv:

| Name  | Department |
|-------|------------|
| Bobby | Marketing  |
| Chuck | Marketing  |

和输出-new.csv:

| Name  | Department   |
|-------|--------------|
| Alice | Finance      |
| Daryl | Mailing Svcs |

如果你有一个这么简单的脚本,一旦完成读/写就退出,你不需要费心自己关闭文件,或者使用

with open(...) as x
语句:Python 将在退出时关闭所有打开的文件。程序/脚本。

一旦您对流程充满信心,您可以添加一些代码以将新内容移至原始内容:

import shutil

shutil.move("output-new.csv", "original.csv")
© www.soinside.com 2019 - 2024. All rights reserved.