使用Python中的函数从csv文件中删除行

使用Python中的函数从csv文件中删除行,python,python-3.x,Python,Python 3.x,下面的代码使用我的整个csv文件,而不是给定ImiePsa的一行, 可能有什么问题?只需将内存中的csv文件作为列表读取,然后编辑该列表,然后将其写回csv文件。 def usunPsa(self, ImiePsa): with open('schronisko.csv', 'rb') as input, open('schronisko.csv', 'wb') as output: writer = csv.writer(output) for row

下面的代码使用我的整个csv文件,而不是给定ImiePsa的一行,
可能有什么问题?

只需将内存中的csv文件作为列表读取,然后编辑该列表,然后将其写回csv文件。

def usunPsa(self, ImiePsa):

    with open('schronisko.csv', 'rb') as input, open('schronisko.csv', 'wb') as output:
        writer = csv.writer(output)
        for row in csv.reader(input):
                if row[0] == ImiePsa:
                    writer.writerow(row)
    with open(self.plik, 'r') as f:
            print(f.read())


Dsac;Chart;2;2020-11-04
Dsac;Chart;3;2020-11-04
Dsac;Chart;4;2020-11-04
Lala;Chart;4;2020-11-04
Sda;Chart;4;2020-11-04
Sda;X;4;2020-11-04
Sda;Y;4;2020-11-04
pawel;Y;4;2020-11-04`

If I use usunPsa("pawel") every line gets removed.

我发现了问题。代码中的行[0]返回整行,这意味着未正确分析行。经过一段时间的阅读,我发现csv.reader有一个名为delimiter的参数来分隔列之间的分隔符

添加该参数可以解决您的问题,但不是所有问题。 为我工作的代码(以防万一你还想使用你的原始代码)


请注意,我更改了输出文件名。但是,如果您想保持文件名不变,则必须使用Hamza Malik的答案。

输入和输出文件是相同的,您在读的同时也在写。这是个问题。先读取整个文件,然后写入文件。或者在写入新的临时文件时逐行读取,最后删除CSV并重命名临时文件。我不确定您想在这里做什么。是否只写入与ImiePsa变量中存储的内容相等的行?csv中可能没有与
ImiePsa
匹配的行。你确定有匹配的行吗?@dámMaul是的,没错,CSV文件是文本,而不是二进制文件。您的文件模式不应包括“b”。
lines = list()

members= input("Please enter a member's name to be deleted.")

with open('mycsv.csv', 'r') as readFile:

    reader = csv.reader(readFile)

    for row in reader:

        lines.append(row)

        for field in row:

            if field == members:

                lines.remove(row)

with open('mycsv.csv', 'w') as writeFile:

    writer = csv.writer(writeFile)

    writer.writerows(lines)
import csv

def usunPsa(ImiePsa):
    with open('asd.csv', 'rb') as input, open('schronisko.csv', 'wb') as output:
        writer = csv.writer(output)
        for row in csv.reader(input, delimiter=';'):
            if row[0] == ImiePsa:
                writer.writerow(row)

usunPsa("pawel")