在读取文件后,我真的遇到了从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"
有什么建议吗?
答案 0 :(得分:1)
您可以使用2个列表,users
和passwords
,如下所示:
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')