2015-01-12 59 views
1

我在分割python中的这个列表时出现问题。我想要它做的是拆分列表,但保持密码链接到用户名。如何拆分从文件中读取的字符串

Users = [] 
NewUser = input("Enter the new Users Username: ") 
UserPass = input("Enter the new Users Password: ") 
Users.append([NewUser, UserPass]) 
Pfile = open('Passwords','r') 
print(Pfile.read()) 
CurrentUsers = Pfile.read() 
Pfile.close 
Pfile = open('Passwords','w') 
OldUsers = [] 
OldUsers = CurrentUsers.split() 
print(OldUsers) 
Users.append(OldUsers) 
print(Users) 

我得到的问题是串在最后三版完全摧毁,而不是分裂,我得到:

[['Dan', 'Span'], ['Tim', 'Can']] - previous data already stored 
[''] - the split values 
[['Tin', 'im'], ['']] - the new values added to my previous list 

我认为这可能是一个错字或分裂的不正确的方法列表

谢谢

+1

你有没有使用文件而不是数据库的原因?我建议使用带有适当密码散列方案的数据库(如MySQL)(不要自己推出)。 –

+0

拆分清单?你的意思是字符串?因为split()是一个str方法 – ProgrammingIsAwsome

+1

你也没有关闭文件'Pfile.close < - 没有parens',你应该使用'with'来打开你的文件,你不必自己关闭它们 –

回答

4

您从文件中读取()两次。首先将读取值存储到变量中,然后打印该变量。

从已打开的输入流中读取()所有数据后,该流将“耗尽”,并再次从中读取不会产生任何附加数据(即,文件不会简单地“再次读取”)。为什么你在结果中看到空字符串?

+2

你可能想要解释一下,调用'read'将指针移动到文件末尾,所以再次调用'read'从文件尾部读取。这可以通过按照您的建议进行修改并将该值存储在变量中并使用它,或者在再次读取之前调用打开文件上的“seek(0)”来解决。 – sberry

+0

我同意这是另一种可能性。更简单的是再次打开()另一个IO流。但是鉴于那些显然效率较低的解决方案,并且我认为OP只是学习Python甚至编程,所以最好将它留在那里。 – fnl