如何消除fi中的空行

2024-06-16 12:27:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个项目,我必须管理一个客户列表,它存储在一个txt文件中。我的问题是,当我处理列表时,我把它上传到内存中,然后我处理它,实际上是一个对象列表,当我试图从列表中删除某一行时,我的问题就出现了,我把它从list=[]中删除,然后用新列表重写txt文件,但问题是我留下了空白行,当我再次尝试执行程序时,列表无法读取。我也想提到,我做了一个功能来消除空白行,但它似乎不起作用,有什么帮助?在

这是消除空白行

的函数
def elimina_client(self):
    f = open("clienti.txt","r")
    lines=f.readlines()
    f.close
    f = open("clienti.txt","w")   
    for line in lines:
        if line!="":
             f.write(line)

这是重写文件的函数

^{pr2}$

这是从内存中的列表中删除项目的函数

def sterge_client(self,ident):
    "Deletes a client from the list"
    k=0
    for element in self.lista_clienti:
        if element.get_identitate()==ident:
            self.lista_clienti.remove(element)
            k=1
    if k==0:
        raise RepositoryException(["Nu exista acest ID!"])

这是从文件中删除一行的函数,它实际上是用新的^ {{CD1}}重写列表而没有给定的元素,然后“消除”空白空间,但它似乎不起作用,有人知道为什么吗?在

def sterge_client2(self,ident):
    lista.sterge_client(ident)
    self.rescrie_clienti()
    self.elimina_client() 

Tags: 文件函数selftxtclient列表ifdef
3条回答

迭代列表,从中删除元素不是一个好主意。我会这样写:

self.lista_clienti = [element for element in self.lista_clienti if element.get_identitate()!=ident]

这将创建所有元素的列表,除了那些具有给定id的元素,并在现有元素的位置进行设置。在

如果需要验证-只需在删除前获取lista_clienti的长度,并将其与之后的长度进行比较。如果他们是平等提高错误。在

请注意:

  • 总是尝试使用with语句,在处理文件时,这将确保文件在任何情况下都是关闭的。您的elimina_client函数非常不安全(当然最好完全删除它)。在
  • 不要连接字符串,使用+,请使用format语句或.join()方法。在
  • 我认为最好是所有的行都以\n结尾—这也会使rescrie_clienti更加简单。在
def elimina_client(self):
    with open("clienti.txt","r") as f:
        lines=f.readlines()

    with open("clienti.txt","w") as f:  
        [f.write(line) for line in lines if line.strip() ]

带迭代器的Python3:

^{pr2}$

在函数中删除行。不要对循环使用的列表使用remove()。创建一个包含所有所需行的临时列表并将其返回:

def sterge_client(self,ident):
    "Deletes a client from the list"
    k=0
    templist = list()
    for element in self.lista_clienti:
        if element.get_identitate()!= ident:
           templist.append(element)
        else:
            k=1
    if k==0:
        raise RepositoryException(["Nu exista acest ID!"])

    return templist

相关问题 更多 >