如何消除从文件中的空行

问题描述 投票:1回答:3

我工作的一个项目,我要管理客户名单,这是存储在一个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!"])

这是suposed删除从文件中的一条线的功能,它实际上正在改写新list=[]列表中没有一个给定的元素是什么,然后在“消除”空白空间,但它似乎没有工作,任何人知道为什么 ?

def sterge_client2(self,ident):
    lista.sterge_client(ident)
    self.rescrie_clienti()
    self.elimina_client() 
python file lines
3个回答
7
投票
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')

1
投票

在功能删除线。不使用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

1
投票

这不是好主意,迭代列表,从中删除元素。我会写方式如下:

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

这将创建的所有元素的列表,除了那些与给定的标识,并设置在地方存在的一个。

如果你需要验证 - 简单地得到lista_clienti的长度删除之前和之后与长度进行比较。如果他们是平等的 - 提高误差修改。

几个注意事项:

  • 永诺尝试使用with statment,在处理文件时,这将确保该文件是在任何情况下关闭。你elimina_client功能是非常不安全的(当然最好是在全部删除)。
  • 不连接字符串,使用+,使用格式语句或。加入()方法。
  • 我认为这是有由\n结束所有行好主意 - 这也将让rescrie_clienti多simplier。
© www.soinside.com 2019 - 2024. All rights reserved.