使用Python中的函数从csv文件中删除行
下面的代码使用我的整个csv文件,而不是给定ImiePsa的一行,使用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文件作为列表读取,然后编辑该列表,然后将其写回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")