繁体   English   中英

Python - 打印特定图案

[英]Python - Printing a specific pattern

我有三个列表和一个字符串变量:

var = "http:/domain.com"
directories = ['dir_A', 'dir_B', 'dir_C']
files = ['file_A', 'file_B', 'file_C']
extensions = ['ext_A', 'ext_B']

我想打印一个完全像这样的模式:

http:/domain.com/

http:/domain.com/dir_A/
http:/domain.com/dir_A/file_A.ext_A
http:/domain.com/dir_A/file_A.ext_B
http:/domain.com/dir_A/file_B.ext_A
http:/domain.com/dir_A/file_B.ext_B
http:/domain.com/dir_A/file_C.ext_A
http:/domain.com/dir_A/file_C.ext_B

http:/domain.com/dir_A/dir_B/
http:/domain.com/dir_A/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_B/file_C.ext_B

http:/domain.com/dir_A/dir_B/dir_C/
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_B

http:/domain.com/dir_A/dir_C/
http:/domain.com/dir_A/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_C/file_C.ext_B

http:/domain.com/dir_A/dir_C/dir_B/
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_B

这仅适用于http:/domain.com/dir_A/...

儿子的情况http:/domain.com/dir_B/...http:/domain.com/dir_C/...

我已经尝试过自己,但未能成功实现所需的模式

任何帮助将不胜感激

您将需要来自itertools模块的combinationspermutationsproduct来获得所有这些变体:

from itertools import permutations, combinations, product
def combine(dom, dirs, files, exts):
    return ('/'.join((dom, *perm, f"{f}.{e}"))
            for i in range(len(dirs)+1)
            for comb in combinations(dirs, i)
            for perm in permutations(comb)
            for f, e in product(files, exts))
                
for x in combine(var, directories, files, extensions):
    print(x)

Output(总共 96 个;请注意,我将所有\更改为/并更改了域):

http://example.com/file_A.ext_A
...
http://example.com/dir_A/dir_C/file_C.ext_B
...
http://example.com/dir_C/dir_B/dir_A/file_C.ext_B

如果您想自己实现生成目录的各种排列,您可以使用递归 function。 获得目录后,文件和扩展名就很简单了。

#!/usr/bin/env python

var = "http:/domain.com"
directories = ["dir_A", "dir_B", "dir_C"]
files = ["file_A", "file_B", "file_C"]
extensions = ["ext_A", "ext_B"]

root = var + '/'

def combos(dirs):
    if len(dirs) == 1:
        return [dirs[:]]
    else:
        c = []
        for i in range(len(dirs)):
            c.append([dirs[i]])
            c.extend([[dirs[i]] + combo
                      for combo in combos(dirs[:i] + dirs[i+1:])])
        return c


print(root)
for combo in combos(directories):
    prefix = root + ''.join([d + '/' for d in combo])
    print('\n' + prefix)
    for file in files:
        for ext in extensions:
            print(prefix + file + '.' + ext)

output:

http:/domain.com/

http:/domain.com/dir_A/
http:/domain.com/dir_A/file_A.ext_A
http:/domain.com/dir_A/file_A.ext_B
http:/domain.com/dir_A/file_B.ext_A
http:/domain.com/dir_A/file_B.ext_B
http:/domain.com/dir_A/file_C.ext_A
http:/domain.com/dir_A/file_C.ext_B

http:/domain.com/dir_A/dir_B/
http:/domain.com/dir_A/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_B/file_C.ext_B

http:/domain.com/dir_A/dir_B/dir_C/
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_B/dir_C/file_C.ext_B

http:/domain.com/dir_A/dir_C/
http:/domain.com/dir_A/dir_C/file_A.ext_A
http:/domain.com/dir_A/dir_C/file_A.ext_B
http:/domain.com/dir_A/dir_C/file_B.ext_A
http:/domain.com/dir_A/dir_C/file_B.ext_B
http:/domain.com/dir_A/dir_C/file_C.ext_A
http:/domain.com/dir_A/dir_C/file_C.ext_B

http:/domain.com/dir_A/dir_C/dir_B/
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_A.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_B.ext_B
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_A
http:/domain.com/dir_A/dir_C/dir_B/file_C.ext_B

http:/domain.com/dir_B/
http:/domain.com/dir_B/file_A.ext_A
http:/domain.com/dir_B/file_A.ext_B
http:/domain.com/dir_B/file_B.ext_A
http:/domain.com/dir_B/file_B.ext_B
http:/domain.com/dir_B/file_C.ext_A
http:/domain.com/dir_B/file_C.ext_B

http:/domain.com/dir_B/dir_A/
http:/domain.com/dir_B/dir_A/file_A.ext_A
http:/domain.com/dir_B/dir_A/file_A.ext_B
http:/domain.com/dir_B/dir_A/file_B.ext_A
http:/domain.com/dir_B/dir_A/file_B.ext_B
http:/domain.com/dir_B/dir_A/file_C.ext_A
http:/domain.com/dir_B/dir_A/file_C.ext_B

http:/domain.com/dir_B/dir_A/dir_C/
http:/domain.com/dir_B/dir_A/dir_C/file_A.ext_A
http:/domain.com/dir_B/dir_A/dir_C/file_A.ext_B
http:/domain.com/dir_B/dir_A/dir_C/file_B.ext_A
http:/domain.com/dir_B/dir_A/dir_C/file_B.ext_B
http:/domain.com/dir_B/dir_A/dir_C/file_C.ext_A
http:/domain.com/dir_B/dir_A/dir_C/file_C.ext_B

http:/domain.com/dir_B/dir_C/
http:/domain.com/dir_B/dir_C/file_A.ext_A
http:/domain.com/dir_B/dir_C/file_A.ext_B
http:/domain.com/dir_B/dir_C/file_B.ext_A
http:/domain.com/dir_B/dir_C/file_B.ext_B
http:/domain.com/dir_B/dir_C/file_C.ext_A
http:/domain.com/dir_B/dir_C/file_C.ext_B

http:/domain.com/dir_B/dir_C/dir_A/
http:/domain.com/dir_B/dir_C/dir_A/file_A.ext_A
http:/domain.com/dir_B/dir_C/dir_A/file_A.ext_B
http:/domain.com/dir_B/dir_C/dir_A/file_B.ext_A
http:/domain.com/dir_B/dir_C/dir_A/file_B.ext_B
http:/domain.com/dir_B/dir_C/dir_A/file_C.ext_A
http:/domain.com/dir_B/dir_C/dir_A/file_C.ext_B

http:/domain.com/dir_C/
http:/domain.com/dir_C/file_A.ext_A
http:/domain.com/dir_C/file_A.ext_B
http:/domain.com/dir_C/file_B.ext_A
http:/domain.com/dir_C/file_B.ext_B
http:/domain.com/dir_C/file_C.ext_A
http:/domain.com/dir_C/file_C.ext_B

http:/domain.com/dir_C/dir_A/
http:/domain.com/dir_C/dir_A/file_A.ext_A
http:/domain.com/dir_C/dir_A/file_A.ext_B
http:/domain.com/dir_C/dir_A/file_B.ext_A
http:/domain.com/dir_C/dir_A/file_B.ext_B
http:/domain.com/dir_C/dir_A/file_C.ext_A
http:/domain.com/dir_C/dir_A/file_C.ext_B

http:/domain.com/dir_C/dir_A/dir_B/
http:/domain.com/dir_C/dir_A/dir_B/file_A.ext_A
http:/domain.com/dir_C/dir_A/dir_B/file_A.ext_B
http:/domain.com/dir_C/dir_A/dir_B/file_B.ext_A
http:/domain.com/dir_C/dir_A/dir_B/file_B.ext_B
http:/domain.com/dir_C/dir_A/dir_B/file_C.ext_A
http:/domain.com/dir_C/dir_A/dir_B/file_C.ext_B

http:/domain.com/dir_C/dir_B/
http:/domain.com/dir_C/dir_B/file_A.ext_A
http:/domain.com/dir_C/dir_B/file_A.ext_B
http:/domain.com/dir_C/dir_B/file_B.ext_A
http:/domain.com/dir_C/dir_B/file_B.ext_B
http:/domain.com/dir_C/dir_B/file_C.ext_A
http:/domain.com/dir_C/dir_B/file_C.ext_B

http:/domain.com/dir_C/dir_B/dir_A/
http:/domain.com/dir_C/dir_B/dir_A/file_A.ext_A
http:/domain.com/dir_C/dir_B/dir_A/file_A.ext_B
http:/domain.com/dir_C/dir_B/dir_A/file_B.ext_A
http:/domain.com/dir_C/dir_B/dir_A/file_B.ext_B
http:/domain.com/dir_C/dir_B/dir_A/file_C.ext_A
http:/domain.com/dir_C/dir_B/dir_A/file_C.ext_B

我猜您想要正斜杠,但我按照您的要求对其进行了编码。 您忘记在提示中引用一些字符串。

#!/usr/bin/env python3
import itertools

var = "http:/domain.com"
directories = ["dir_A", "dir_B", "dir_C"]
files = ["file_A", "file_B", "file_C"]
extensions = ["ext_A", "ext_B"]

print(var + "/")
print()
for dir in directories:
  print(var + "/" + dir + "/")
  for i in list(itertools.product(files, extensions)):
    print("%s/%s/%s.%s" % (var, dir, i[0], i[1]))
  print()

您可以执行以下操作:

from itertools import product

var = "http:\\\\domain.com"
directories = ["dir_A", "dir_B", "dir_C"]
files = ["file_A", "file_B", "file_C"]
extensions = ["ext_A", "ext_B"]

nestDir = ""
for directory in directories:
    nestDir = nestDir + "\\\\" + directory
    for file, ext in product(files, extensions):
        print(var + nestDir + "\\\\" + file + "." + ext)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM