2009-07-05 73 views
1

我对Python(2.6.2)有点奇怪的问题,我得出的结论是Vista端口中的一个错误(我无法在XP或Linux中复制它)。打印列表内容的问题

我有一个用户列表,加密密码和他们的主机,我存储在一个更大的列表(它充当一种数据库)。

这一切都工作正常和丹迪,除了存储单个用户的数据如何存储和如何存储组不一致。

由 'create_user' 方法

[ '本地主机', '演示', 'demouserpasswordhash']

由 'create_database' 创建

方法创建

[ '\ x00d \ x00c \ x00a \ x00l \ x00h \ x00o \ x00s \ x00t \ x00','\ x00d \ x00e \ x00m \ x00o \ x00u \ x00s \ x00e \ x00s \ x00s \ x00w \ x00o \ x00r \ x00d \ x00h \ x00a \ x00s \ x00h \ x00 \ r \ x00 \ n']

我不明白为什么它这样做,因为它的代码是多么简单:

# ----- base functions 

def create_user (user_data): 
    return user_data.split(":") 

def show_user (user_data): 
    print "Host: ", user_data[0] 
    print "Username: ", user_data[1] 
    print "Password: ", user_data[2] 
    print 

def create_database (user_list): 
    database = [] 
    for user in user_list: 
     database.append(create_user(user)) 
    return database 

def show_database(database): 
    for row in database: 
     show_user(row) 

# ----- test area 

users = open("users.txt") 


test_user = create_user("localhost:demo:demouserpasswordhash") 
db = create_database(users) 

print db[0] 
print test_user 

# ----- 

任何人有任何与此相似的经历,或只是我吗?

回答

6

你的文件users.txt是UTF-16,但是你打开它作为ASCII。

要么将​​其更改为ASCII,或打开它就像这样:

import codecs 
users = codecs.open("users-16.txt", "r", "utf-16") 
+0

更换

create_user(user) 

I <3你。谢谢。 – 2009-07-05 23:31:43

1

尝试用

create_user(user.decode("utf16")) 
+0

我认为大部分问题都来自我使用写字板写入文本文件。我把它重新编入Emacs,它工作得很好。 – 2009-07-05 23:35:57