簡體   English   中英

使用Python中的函數從csv文件中刪除行

[英]Delete rows from csv file using function in Python

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.

下面的代碼是我的整個 csv 文件,而不是只有一行給定的 ImiePsa,那里可能有什么問題?

我發現了問題。 代碼中的 row[0] 返回整行,這意味着這些行沒有正確解析。 經過一番閱讀,我發現 csv.reader 有一個名為 delimiter 的參數來分隔列之間的分隔符。

添加該參數可以解決您的問題,但並非所有問題。 對我有用的代碼(以防萬一你仍然想使用你的原始代碼)

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")

請注意,我更改了輸出文件名。 但是,如果您想保持文件名相同,則必須使用 Hamza Malik 的答案。

只需將內存中的 csv 文件作為列表讀取,然后編輯該列表,然后將其寫回 csv 文件。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM