Skip to main content
 首页 » 编程设计

python之如何消除文件中的空行

2025年05月04日14shanyou

我正在做一个项目,我必须管理一个存储在 txt 文件中的客户列表。我的问题如下,当我使用列表时,我将它上传到内存中的 list=[] 变量中,然后我使用它,实际上是一个对象列表,我的问题是我尝试从列表中删除某一行,我将其从 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) 

这是重写文件的函数

def rescrie_clienti(self): 
    """This function rewrites the clienti document""" 
    with open(self.fisier2,'w') as f: 
        for i in range(0,len(lista.lista_clienti)): 
                if i==len(lista.lista_clienti)-1 : 
                    s =str(lista.lista_clienti[i].get_identitate())+","+str(lista.lista_clienti[i].get_nume())+","+str(lista.lista_clienti[i].get_cnp()+","+str(lista.lista_clienti[i].get_filme_inchiriate())+","+str(lista.lista_clienti[i].get_inchirieri())) 
                    f.write("\n") 
                    f.writelines(s) 
                else: 
                    s =str(lista.lista_clienti[i].get_identitate())+","+str(lista.lista_clienti[i].get_nume())+","+str(lista.lista_clienti[i].get_cnp()+","+str(lista.lista_clienti[i].get_filme_inchiriate())+","+str(lista.lista_clienti[i].get_inchirieri())) 
                    f.writelines(s) 

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

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

这是应该从文件中删除一行的函数,它实际上做的是用没有给定元素的新 list=[] 重写列表,然后“消除”空格,但它似乎不起作用,有人知道为什么吗?

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

请您参考如下方法:

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:

#!/usr/bin/env python3 
 
def elimina(fsrc, fdst): 
  with open(fsrc,'r') as src, open(fdst,'w') as dst: 
    [ dst.writelines(line) for line in src if line.strip() ] 
 
if __name__ == '__main__': 
  elimina('text.txt','text_out.txt')