如何将文件分成两个单独的数组?

时间:2018-09-25 12:49:40

标签: python

我需要将文件拆分为2个单独的数组。我的意思是将username:password文件拆分为用户名和密码数组,然后能够使用相同的索引号调用它们,以使用户名和密码匹配。到目前为止,我有:

with open('userlist.txt', 'r') as userlist:
    for line in userlist:
        user, pwd = line.strip().split(':')

我不想将代码拆分为2个不同的变量,而是将它们拆分为2个不同的数组。这样,我可以使用相同的索引号来调用它们以获取user:pass组合。

谢谢。

3 个答案:

答案 0 :(得分:2)

Taohidul Islam已经发布了一个技术上完美的解决方案,

  

将username:password文件拆分为一个username数组和一个password数组,然后能够使用相同的索引号对其进行调用,以使username和password匹配

这不是正确的设计。使用此解决方案,您可以依赖长度相同且顺序相同的清单,这是无法保证的,因此充其量是脆弱的(爱荷华州:您可以打赌...会破裂)。

此外,要查找用户及其密码,您需要先进行顺序查找(在“用户名”列表上),然后在第二个列表上进行索引访问,这远非最佳选择。

将键(此处为用户名)与值(此处为密码)“匹配”的正确数据结构是dict:具有优化键查找(0(1 ),而不是列表中的0(N),所以您真正想要的是:

users = {}
with open('userlist.txt', 'r') as userlist:
    for line in userlist:
        user, pwd = line.strip().split(':')
        users[user] = pwd

答案 1 :(得分:0)

您可以尝试以下方法:

username = list()
password = list()
with open('userlist.txt', 'r') as userlist:
    for line in userlist:
        user, pwd = line.strip().split(':')
        username.append(user)
        password.append(pwd)

total_length = len(username)
for i in range(total_length):
    print(username[i], password[i])

您可以阅读此resource来了解数据结构。

答案 2 :(得分:0)

我建议使用字典而不是列表:

您可以这样做:

with open("userlist.txt", "r") as f:
    # create a nice dict with name to password mapping
    name_password_mapping = dict(
        line.strip().split(":")
        for line in f.readlines()
    )
# Access the user password with
user_pass = name_password_mapping["user"]
# do stuff with user and password

# if you want to have the user and the password together as a tuple, 
# you can still do:
list_of_user_password_pairings = name_password_mapping.items()
print(list_of_user_password_pairings[0]) #  prints ("user0", "pw_user0")