拆分和剥离输出python

时间:2014-06-22 21:53:18

标签: python list split strip

在读取文件后,我真的遇到了从python获取干净输出的问题。

到目前为止,这是我的代码:

user_pass_list = []
count = 0
for Line in open(psw):
    fields = Line.strip("\n").strip(",").split(":")
    user_pass_list.append(fields)
    count = count + 1

print (count)

for item in range (0, count):
    print (user_pass_list[item])

这是我一直得到的输出:

['administrator', 'admin']
['']
['administrator', 'password']
['']
['admin', '12345']
['']
['admin', '1234']
['']
['root', 'root']
['']
['root', 'password']
['']
['root', 'toor']

这是我试图读入列表的文本文件。

administrator:admin    
administrator:password    
admin:12345    
admin:1234    
root:root    
root:password    
root:toor
有人可以帮帮我吗?我想要的是每个字段都有自己的列表。

users[0]="administrator"
passwords[0]="admin"
users[1]="administrator"
passwords[1]="password"

有什么建议吗?

3 个答案:

答案 0 :(得分:1)

您可以使用2个列表,userspasswords,如下所示:

users = []
passwords = []

with open(psw, 'rb') as fin:
    for line in fin.readlines():
        fields = line.strip().split(':')
        users.append(fields[0])
        passwords.append(fields[1])

但我认为有一个元组列表会更有用:

credentials = []

with open(psw, 'rb') as fin:
    for line in fin.readlines():
        fields = line.strip().split(':')
        credentials.append((fields[0], field[1]))

答案 1 :(得分:1)

如果你尝试立即将它解压缩到两个变量中的字段,并将它包装在try /中,那么如果它没有解压缩到两个字段,那么它只会失败并跳过它?

for Line in open(psw):
    try:
        user, pswd = Line.strip("\n").strip(",").split(":")
        user_pass_list.append([user, pswd])
        count = count + 1
    except:
        pass

您可能还想删除空格和标签。

答案 2 :(得分:0)

有很多不同的方法可以做到这一点......

直截了当的方式:

up0 = []
with open('pwd.txt') as fp:
    for line in fp:
        words = line.split(':')
        username, password = [w.strip() for w in words]
        up0.append((username, password))

使用嵌套列表理解:

up1 = [(username, password.strip())
       for (username, password)
       in [line.split(':') for line in open('pwd.txt').readlines()]]

如果您正在使用可以使用简单地图编写的Python 2.7:

up2 = [map(str.strip, line.split(':')) for line in open('pwd.txt').readlines()]

Python 3要求您将map包裹在list()内,或者您可以通过列表理解来替换地图:

up3 = [[w.strip() for w in line.split(':')] for line in open('pwd.txt').readlines()]

最后是那些你觉得时髦,正则表达的时候:

import re
up4 = re.findall(r'([^:]+):([^\s]+).*\n', open('pwd.txt').read())

似乎应该有一个使用itertools的解决方案......; - )

你可以通过例如打印出来。 (Python 2.7):

print "Count:", len(up0)

for item in up0:
    print item

或(Python 3):

print("Count:", len(up0))

for username, password in up0:
    print("username={}, password={}".format(username, password)

如果你想要推荐,我建议使用up0版本。

[update]:刚看到你想要一个数组中的所有用户名和另一个数组中的密码......

上面的代码会创建一个元组列表,您可以通过以下方式查看:使用pprint:

import pprint
pprint.pprint(up0)

给出

[('administrator', 'admin'),
 ('administrator', 'password'),
 ('admin', '12345'),
 ('admin', '1234'),
 ('root', 'root'),
 ('root', 'password'),
 ('root', 'toor')]

这可以很容易地转换成你想要的:

username, password = zip(*up0)
print 'username:', username
print 'password:', password

给出了

username: ('administrator', 'administrator', 'admin', 'admin', 'root', 'root', 'root')
password: ('admin', 'password', '12345', '1234', 'root', 'password', 'toor')