我该如何减少这段代码?

时间:2016-09-23 22:39:14

标签: python

我有两个文本文件“usernames.txt”和“passwords.txt”,我想让它们以特定的顺序打印出来,我有一段代码完全符合我的要求,但我觉得它可以缩短。

with open('passwords.txt','r') as f:
    for line in f:
        for password in line.split():
            with open('usernames.txt','r') as f:
                for line in f:
                    for username in line.split():
                        print username +":"+ password

这对我来说非常合适,我觉得我可以让它更短!

目前的输出是:

username1:password
username1:password1
username1:password2
username2:password
username2:password1
username2:password2

2 个答案:

答案 0 :(得分:3)

不要担心缩短它,通过删除嵌套使其更具可读性。

  1. Open both files in one line
  2. 使用嵌套的list comprehension
  3. 提取数据
  4. 使用itertools.product获取您的组合
  5. 像这样的东西

        import itertools
    
        with open('passwords.txt', 'r') as pf, open('usernames.txt', 'r') as uf:
            passwords = [pwd for line in pf for pwd in line.split()]
            usernames = [uname for line in uf for uname in line.split()]
    
        for username, password in itertools.product(usernames, passwords):
            print("{}: {}".format(username, password)
    

答案 1 :(得分:-1)

如果我自己这样说的话,不要太短(5对7行)但至少有点可读性:

main.cc,  Makefile, README

修改

此答案假设您的passwords = open('passwords.txt').readlines() usernames = open('usernames.txt').readlines() for p in passwords: for u in usernames: print '%s:%s' % (u.strip(), p.strip()) passwords.txt每行有一个条目。不是一行包含多个条目。