因为不要在具有嵌套循环的文件上再次迭代 - Python

时间:2017-12-22 21:01:13

标签: python

我有一个users.txt和password.txt,我需要迭代这两个文件

users.txt示例:

  • 管理员
  • 预言
  • 用户

password.txt

的示例
  • toor的
  • rooot
  • 管理员
  • 密码

在我的循环中,只需打印第一个用户" root"和所有的密码,但不 打印其他用户,这是我的代码:

fu = open("/home/dskato/diccionarios/user.txt", "r")
fp = open("/home/dskato/diccionarios/pasword.txt", "r")

for user in fu.readlines():
  for password in fp.readlines():
    print "Username: "+user+" Password: "+password

这是输出,但不会迭代其他用户 它出了什么问题?

用户名:root  密码:123456

用户名:root  密码:12345678

用户名:root  密码:12345678

用户名:root  密码:1234

用户名:root  密码:传递

用户名:root  密码:密码

我需要这个输出示例:

  • root:123456
  • 根:密码
  • 根:toor的
  • 管理员:123456
  • 管理员:密码
  • 管理员:TOOR

2 个答案:

答案 0 :(得分:3)

您在外部循环的第一次迭代中使用内部循环迭代所有密码。在外循环的第二次迭代中,没有更多的密码要迭代(fp当前位置在文件的末尾)。

您可以在每次用户迭代后fp.seek(0)重置fp

for user in fu:
    for password in fp:
        print "Username: " + user.rstrip('\n') + " Password: " + password.rstrip('\n')
    fp.seek(0)

或者您可以将密码读入列表:

passwords = list(fp)

for user in fu:
    for password in passwords:
        print "Username: " + user.rstrip('\n') + " Password: " + password.rstrip('\n')

这里有文件访问和内存使用之间的权衡。

答案 1 :(得分:0)

你有一个嵌套的for循环,它为每个用户(在外部循环中)读取密码(在内部循环中)。

现在发生了什么,你的外部循环读取第一个用户(root),内部读取所有密码,并与root一起打印。

当您的外部循环尝试处理第二个用户时,您的密码文件已经到达结尾,没有任何内容被打印。

您需要分别读取这些文件的行,将其存储在数组中并稍后打印。

更好的是,只需使用粘贴:https://unix.stackexchange.com/questions/234208/combining-several-files-into-a-single-csv