根据行号从 CSV 中删除一行,然后移动所有行

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

假设我有这个 CSV:

my friend hello, test
ok, no
whatever, test
test test, ok

我想删除第 3 行,所以我会调用我的函数:

remove_from_csv(3)

我找不到任何内置的删除功能,而且我不想“写”任何东西,所以我试图找到一种方法来读取、删除和移动。

到目前为止,我至少可以读到想要的行号。

def remove_from_csv(index):

    with open('queue.csv') as file:
        reader = csv.reader(file)

        line_num = 0
        for row in reader:
            line_num += 1
            if line_num == index:
                print(row)

remove_from_csv(3)

无论如何,测试一下

但是,我不知道如何删除该行并在之后不留空白。

python csv rows csvreader csvwriter
3个回答
1
投票

尝试:

import pandas as pd
def remove_nth_line_csv(file_name, n):
    df = pd.read_csv(file_name, header=None)
    df.drop(df.index[n], inplace=True)
    df.to_csv(file_name, index=False, header=False)

记住 pandas 索引从 0 开始。因此,计数从 0,1,2,3,4...n 开始


0
投票

如果您尝试从文件中删除特定行(此处为 3.),那么您不需要

csv
模块(或第三方库),只需基本的文件操作即可:

from pathlib import Path

with open("queue.csv", "r") as fin, open("new_queue.csv", "w") as fout:
    fout.writelines(line for n, line in enumerate(fin, start=1) if n != 3)
Path("new_queue.csv").rename("queue.csv")

0
投票

在不使用外部库的情况下解决此问题的最干净方法是将行拉入列表并使用它们的索引号来操作它们。

其实,当我们给出起始索引和结束索引时,我们可以用同样的方法删除单行或多行。

import csv

def remove_rows_from_csv(file_path, first_index:int, last_index:int):
    with open(file_path, mode='r', newline='') as file:
        reader = csv.reader(file)
        rows = list(reader)
        file.close()
            
    new_rows = rows[:first_index] + rows[last_index:]
            
    with open(self.file_path, mode='w', newline='') as file:
        writer = csv.writer(file)
        writer.writerows(new_rows)
        file.close()

然后简单地调用该方法:

remove_rows_from_csv(2,3)

注意:我从未研究过使用

file.close()
关键字打开文件时是否真的需要
with
语法。这是我的老习惯了。

© www.soinside.com 2019 - 2024. All rights reserved.