2014-09-27 239 views
-1

文本文件覆盖的话我创建的第一行包含创建用户的计数器和行的文本中包含用户名,密码,其余的文本文件.. 例如:与蟒蛇

2 
username Name Last_name Password 
username1 Name Last_name1 Password1 

我使用下面的命令:

def SaveDatA(self): 
    #if self.CheckValid() == False: 
     #return 
    with open("data.txt","a") as f: 
     f.write(self.userEntry.get() + " " + self.NameEntry.get() + " " + self.LastEntry.get()+ " " + self.PasswordEntry.get() + "\n") 
     self.counter += 1 

我想更新计数器到第一线

+1

我建议你简单地删除第一行的总数,因为它是多余的。 – starrify 2014-09-27 15:33:05

+0

您可能应该创建一个包含所需内容的临时文件,然后将其os.rename()创建为原始文件名。这是原子的,即使在NFS上也是如此。 – user1277476 2014-09-27 18:25:49

回答

0

你要吗?

f1_lines = open('data.txt', 'r').readlines() 

with open('data.txt','w') as f: 
     f.write(self.userEntry.get() + " " + self.NameEntry.get() + " " + self.LastEntry.get()+ " " + self.PasswordEntry.get() + "\n") 
     self.counter += 1 
     f1_lines[0]=str(self.counter)+'\n' 
     f.write(''.join(f1_lines)) 

随着readlines()创建列表包含的所有文件中的行,所以你更改名单与f1_lines[0]=str(self.counter)+'\n'的第一个索引,然后重写它的文件!

+0

我试过了 - 没有工作。我只想编辑self.counter变量的第一行 – Gabriel 2014-09-27 16:01:30

+0

我是编程世界的新手(包括python)。如果你解释了这些变化,我会很感激。 – Gabriel 2014-09-27 16:04:31

+0

我编辑答案!尝试一下 !我将在答案中添加解释! – Kasramvd 2014-09-27 16:12:40

0

大量的试验后,该代码工作的:

with open("data.txt","a") as f: 
    f.write(self.userEntry.get() + " " + self.NameEntry.get() + " " + self.LastEntry.get()+ " " + self.PasswordEntry.get() + "\n") 
    self.counter += 1 

fileCopy = open('data.txt', 'r').readlines() 
fileCopy[0] = fileCopy[0][1:] 

with open("data.txt","w") as f: 
    f.write(str(self.counter)+" ") 
    f.write("".join(fileCopy)) 

但也许有另一种更好的办法?