我工作的一个项目,我要管理客户名单,这是存储在一个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()
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')
在功能删除线。不使用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
这不是好主意,迭代列表,从中删除元素。我会写方式如下:
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。